線程由於未拿到鎖標記而發生的阻塞不一樣於前面五個基本狀態中的阻塞,稱爲鎖池。線程
每一個對象都有本身的一個鎖池的空間,用於放置等待運行的線程。對象
這些線程中哪一個線程拿到鎖標記由系統決定。隊列
鎖標記若是過多,就會出現線程等待其餘線程釋放鎖標記,而又都不釋放本身的鎖標記供其餘線程運行的情況。就是死鎖。資源
死鎖的問題經過線程間的通訊的方式進行解決。it
線程間通訊機制實際上也就是協調機制。通信
線程間通訊使用的空間稱之爲對象的等待隊列,則個隊列也是屬於對象的空間的。阻塞
Object類中又一個wait(),在運行狀態中,線程調用wait(),此時表示着線程將釋放本身全部的鎖標記,同時進入這個對象的等待隊列。系統
等待隊列的狀態也是阻塞狀態,只不過線程釋放本身的鎖標記。
Notify()
若是一個線程調用對象的notify(),就是通知對象等待隊列的一個線程出列。進入鎖池。若是使用notifyall()則通知等待隊列中全部的線程出列。
注意:只能對加鎖的資源進行wait()和notify()。