wait()
wait是object類的方法,該方法将目前線程置于”預執行隊列”,并且在wait所處的代碼處停止執行,直到接到通知後或被中斷為止
注意:調用wait前,線程必須獲得該對象的對象級别鎖,就是隻能在同步方法或者同步塊中調用wait方法,在執行wait方法後,目前線程釋放鎖,在wait傳回前,線程與其他線程競争獲得鎖,如果調用wait時沒有持有鎖則抛出異常:沒有獲得監聽器,它是runtime的一個子類,是以wait不用捕獲異常
notify()
與上相同必須有鎖和沒鎖時抛出沒有對象監聽器異常,執行notify方法後,目前線程不會立即釋放鎖,直到notify方法程式執行完,才能退出syn塊,釋放鎖此時wait才能得到鎖,同時隻有一個處于wait狀态的對象得到鎖,當多次調用notify時,會随機将wait線程進行喚醒。
notifyAll()
可以使所有處于等待隊列中等待同一共享資源的全部線程從等待狀态退出進入可運作狀态,此時優先級高的最先執行,但也有可能是随機執行,這取決于虛拟機的實作
sleep()
sleep要捕獲異常,同時sleep是線程thread的方法,讓出CPU給其他線程,sleep不放棄對象鎖,一直把持着監聽器