Cara menyelesaikan pengecualian kebuntuan benang Java (ThreadDeadlockException)
Pengenalan:
Pembuluh berbilang adalah salah satu ciri yang biasa digunakan dalam pengaturcaraan Java, tetapi dalam persekitaran berbilang benang, pengecualian kebuntuan benang mungkin berlaku, iaitu, antara benang Kedua-dua pihak sedang menunggu antara satu sama lain untuk melepaskan sumber dan tidak dapat meneruskan pelaksanaan. Artikel ini akan membincangkan punca pengecualian kebuntuan benang dan menyediakan beberapa kaedah biasa dan kod sampel untuk menyelesaikan kebuntuan benang.
1. Punca pengecualian kebuntuan benang
Kebuntuan benang biasanya disebabkan oleh sebab berikut:
Cuba elakkan pembentukan hubungan menunggu bulat antara benang untuk sumber. Anda boleh menggunakan susunan sumber untuk mengelakkan menunggu bulat, seperti sumber penomboran dan memerlukan benang untuk mendapatkan sumber dalam susunan berangka.
public class DeadlockExample { private static final Object resource1 = new Object(); private static final Object resource2 = new Object(); public static void main(String[] args) { Thread thread1 = new Thread(() -> { synchronized (resource1) { System.out.println("Thread 1: Holding resource 1"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (resource2) { System.out.println("Thread 1: Holding resource 1 and 2"); } } }); Thread thread2 = new Thread(() -> { synchronized (resource2) { System.out.println("Thread 2: Holding resource 2"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (resource1) { System.out.println("Thread 2: Holding resource 2 and 1"); } } }); thread1.start(); thread2.start(); } }
Kesimpulan:
Pengecualian buntu benang ialah masalah biasa dalam pengaturcaraan berbilang benang, tetapi ia boleh diselesaikan dengan mengelakkan terlalu banyak blok penyegerakan, mengelakkan menunggu gelung, menggunakan kunci bermasa, menggunakan objek Kunci, dsb. Apabila menulis kod berbilang benang, anda harus memberi perhatian kepada kaedah di atas untuk mengelakkan masalah yang disebabkan oleh kebuntuan benang.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan pengecualian kebuntuan benang Java (ThreadDeadlockException). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!