Deadlock trong java hay bế tắc trong java là một phần của đa luồng. Deadlock có thể xảy ra trong trường hợp một luồng đang đợi một khóa đối tượng (object lock), được sử dụng bởi một luồng khác và luồng thứ hai đang chờ đợi một khóa đối tượng (object lock) được sử dụng bởi luồng thứ nhất. Vì cả hai luồng đang chờ đợi nhau để giải phóng khóa, tình trạng này được gọi là bế tắc (deadlock).
Nội dung chính
Ví dụ về deadlock trong java
public class TestDeadlockExample1 { public static void main(String[] args) { final String resource1 = "ratan jaiswal"; final String resource2 = "vimal jaiswal"; // t1 tries to lock resource1 then resource2 Thread t1 = new Thread() { public void run() { synchronized (resource1) { System.out.println("Thread 1: locked resource 1"); try { Thread.sleep(100); } catch (Exception e) { } synchronized (resource2) { System.out.println("Thread 1: locked resource 2"); } } } }; // t2 tries to lock resource2 then resource1 Thread t2 = new Thread() { public void run() { synchronized (resource2) { System.out.println("Thread 2: locked resource 2"); try { Thread.sleep(100); } catch (Exception e) { } synchronized (resource1) { System.out.println("Thread 2: locked resource 1"); } } } }; t1.start(); t2.start(); } }
Output:
Thread 1: locked resource 1 Thread 2: locked resource 2