Empat situasi
1 Kunci silang menyebabkan kebuntuan program: Contohnya, utas A memegang kunci R1 dan menunggu kunci R2, dan utas B memegang kunci R1. 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 memperoleh 30MB memori untuk berfungsi, tetapi baki memori yang tersedia ialah 10MB , supaya kedua-dua utas menunggu antara satu sama lain untuk melepaskan sumber memori
3. Pertukaran data soal jawab: Pelayan membuka port tertentu dan menunggu klien untuk mengaksesnya Selepas pelanggan menghantar permintaan, pelayan gagal kerana beberapa Sebabnya adalah permintaan pelanggan terlepas, menyebabkan pelanggan menunggu pelayan untuk bertindak balas, sementara pelayan menunggu untuk pelanggan untuk menghantar permintaan
4. Kebuntuan disebabkan oleh gelung tak terhingga: Anda tidak boleh melihat kebuntuan menggunakan alatan seperti jstack, tetapi Program ini tidak berfungsi dan penggunaan CPU adalah tinggi jenis kebuntuan juga dipanggil animasi sistem yang digantung, yang sukar untuk menyelesaikan masalah dan menghasilkan semula
Instance
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 Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!