Empat situasi di mana Java menyebabkan kebuntuan
1 Kunci silang menyebabkan kebuntuan program: Contohnya, benang A memegang kunci R1 dan menunggu kunci R2, dan benang B memegang kunci R2 dan menunggu kunci R1.
2 Memori tidak mencukupi: Contohnya, dua utas T1 dan T2, T1 telah memperoleh 10MB memori, T2 telah memperoleh 15MB memori, kedua-dua T1 dan T2 perlu mendapatkan 30MB memori untuk berfungsi, tetapi bakinya memori yang tersedia ialah 10MB Dengan cara ini, kedua-dua utas saling menunggu untuk melepaskan sumber memori.
3. Pertukaran data soal jawab: Pelayan membuka port tertentu dan menunggu akses pelanggan Selepas pelanggan menghantar permintaan, pelayan terlepas permintaan pelanggan atas sebab tertentu, menyebabkan pelanggan menunggu untuk respons pelayan sementara pelayan menunggu klien menghantar permintaan.
4. Kebuntuan disebabkan oleh gelung tak terhingga: Anda tidak boleh melihat kebuntuan menggunakan alat seperti jstack, tetapi program tidak berfungsi dan penggunaan CPU adalah tinggi animasi sistem yang digantung, yang sukar untuk diselesaikan dan Muncul Semula.
Contoh berkaitan kebuntuan
public class Main { private final Object MUTEX_READ = new Object(); private final Object MUTEX_WRITE = new Object(); public void read(){ synchronized (MUTEX_READ){ synchronized (MUTEX_WRITE){ } } } public void write(){ synchronized (MUTEX_WRITE){ synchronized (MUTEX_READ){ } } } public static void main(String[] args) throws InterruptedException { Main m = new Main(); new Thread(()->{ while (true){ m.read(); } }).start(); new Thread(()->{ while (true){ m.write(); } }).start(); } }
Atas ialah kandungan terperinci Apakah situasi yang menyebabkan kebuntuan di java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!