多線程 - 死鎖

java 死鎖的實現原理一句話:對象不能被其他線程來訪問


一步步分析來,對象要想不被其他線程訪問,就是給對象加鎖,這樣其他線程就不可以訪問了,但是怎麼加鎖呢?其實就是給當前線程訪問的這個對象的這個方法加上同步塊,這樣,就加鎖了。反過來推,已經有一個線程訪問了當前對象的同步塊,而對於同步塊來說,一旦有線程進入,那麼其他線程要想進入其他同步塊,就必須獲得這個對象鎖,而一個對象只能有一個鎖。


當然,要想設計出來死鎖的例子,應該讓兩個線程同時執行,而且分別引用相同的兩個對象,一個線程給一個對象枷鎖然後再使用另外一個對象,另外一個對象則對另外一個對象枷鎖,然後再調用這個對象。
總結:一個線程裏面,調用一個對象的一個同步塊方法,即對當前對象上鎖。所以,判斷一個對象是否被鎖,就看他的同步代碼塊現在是否有線程在執行。理清楚線程和對象之間的關係,參考線程之間的通信介紹。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章