java中的“死鎖”現象
阿新 • • 發佈:2019-01-01
/*
首先,明確“執行緒死鎖”產生的定義:兩個或者多個執行緒之間相互等待,導致執行緒都無法執行
而,“死鎖”的產生條件:1.有至少一個資源不能共享;2.有至少一個執行緒必須持有資源且等待獲取另一個被別的執行緒持有的資源
3.資源不能被執行緒搶佔(同步狀態下);4必須有迴圈等待
*/
/*示例程式碼*/
/*執行緒t1, t2併發執行*/
class Test implements Runnable { private boolean flag; Test(boolean flag) { this.flag = flag; } public void run() { if (flag) { synchronized(MyLock.locka) { //步驟一:此時t1執行緒持有了locka物件鎖 System.out.println("if locka");//步驟二,t1執行緒等待lockb解鎖 synchronized(MyLock.lockb) { System.out.println("if lockb"); } } }//------》步驟三,陷入“死鎖” else { synchronized(MyLock.lockb) {//步驟一:此時t2執行緒持有了lockb物件鎖 System.out.println("else lockb.."); //步驟二,t2執行緒等待locka解鎖 synchronized(MyLock.locka) { System.out.println("else lockb.."); } } } } } class MyLock { public static final Object locka = new Object(); public static final Object lockb = new Object(); } class DeadLockDemo { public static void main(String[] args) { Test a = new Test(true); Test b = new Test(false); Thread t1 = new Thread(a); Thread t2 = new Thread(b); t1.start(); t2.start(); } }
以上僅是本人初學java的淺顯理解,歡迎各位老師前輩指點錯誤