1. 程式人生 > >Java編程寫一個會導致死鎖的程序

Java編程寫一個會導致死鎖的程序

font gpo bject clas 代碼塊 style 相互 class 同步

線程A和線程B相互等待對方持有的鎖導致程序無限死循環下去。
真正理解什麽是死鎖,這個問題其實不難,幾個步驟:
1)兩個線程裏面分別持有兩個Object對象:lock1和lock2。這兩個lock作為同步代碼塊的鎖;
2)線程1的run()方法中同步代碼塊先獲取lock1的對象鎖,Thread.sleep(xxx),時間不需要太多,50毫秒差不多了,然後接著獲取lock2的對象鎖。這麽做主要是為了防止線程1啟動一下子就連續獲得了lock1和lock2兩個對象的對象鎖
3)線程2的run)(方法中同步代碼塊先獲取lock2的對象鎖,接著獲取lock1的對象鎖,當然這時lock1的對象鎖已經被線程1鎖持有,線程2肯定是要等待線程1釋放lock1的對象鎖的
這樣,線程

1″睡覺”睡完,線程2已經獲取了lock2的對象鎖了,線程1此時嘗試獲取lock2的對象鎖,便被阻塞,此時一個死鎖就形成了

Java編程寫一個會導致死鎖的程序