1. 程式人生 > >java多執行緒中的sleep()、wait()、notify()和物件鎖的關係

java多執行緒中的sleep()、wait()、notify()和物件鎖的關係

1、sleep()不釋放物件鎖。

2、wait()釋放物件鎖。

3、notify()不釋放物件鎖。

(1)、notify釋放鎖嗎?不要誤導別人。notifty()只是喚醒此物件監視器上等待的單個執行緒,直到當前執行緒釋放此物件上的鎖,才有可能繼續執行被喚醒的執行緒。

(2)、對的!這個說法是準確的。notify只是喚醒了一個因為呼叫了wait而自願阻塞的執行緒,它現在可以執行了,但是,能不能訪問,要看該對該物件加鎖的執行緒是否已經釋放了鎖(兩種方式:第一該執行緒運行同步方法已經結束,第二該執行緒呼叫了wait方法,自願阻塞)。

4、下面補充wait() 和 sleep() 的區別:

(1).核心區別:sleep用於執行緒控制,wait用於執行緒間的通訊。


(2),wait() 執行後,釋放執行權,也釋放鎖,與它同步的執行緒或者其它的執行緒都可以拿到執行權。
(3),sleep() 執行後,釋放執行權,但不釋放鎖,即與它不擁有同一個鎖的執行緒可以拿到執行權,但與它同步的執行緒不可以拿到執行權。

對比理解,效果更好。