溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

wait、notify、notifyAll有什么用

發(fā)布時間:2021-11-03 10:55:42 來源:億速云 閱讀:204 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“ wait、notify、notifyAll有什么用”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“ wait、notify、notifyAll有什么用”這篇文章吧。

一:wait、notify、notifyAll簡單介紹


    1. 為什么 wait、notify、notifyAll 不是線程對象Thread的方法 

       原因:首先應(yīng)該明確wait、notify、notifyAll三個方法都是對鎖對象的操作,而鎖可以是任何對象。在java的世界中任何對象都屬于Object類,因此這三個方法都是Object的方法, 而不是線程對象Thread的方法。

     2. 使用方法需要注意兩點:
           a.  這三個方法必須在synchronized關(guān)鍵字包含的臨界區(qū)(簡單理解,就是代碼塊)內(nèi)使用;

           b. 使用方式為鎖對象.方法(),比如obj.wait();


     3. 什么時候加鎖、什么時候釋放鎖?必須明確以下幾點:

           a. notify和notifyAll方法不會釋放鎖,這兩個方法只是通知其他使用該鎖當鎖但是在wait狀態(tài)的線程,可以準備搶鎖了(注:這里還要格外注意一點,其他使用該鎖當鎖且處于wait狀態(tài)的線程只有被notify或notifyAll喚醒了,才有資格搶鎖)


          b. 某個鎖對象調(diào)用wait方法會立即釋放當前線程的該對象鎖 , 且其他線程通過

notify/notifyAll方法通知該線程可以搶該對象鎖時,如果當前線程搶到了,會從當前鎖的wait方法之后開始執(zhí)行 — 即從哪里wait,從哪里執(zhí)行;

          c. 在synchronized、wait、notify、notifyAll的組合里加鎖的方式只有一個即進入同步代碼塊時加鎖;


釋放鎖的方式有兩個: ①鎖對象調(diào)用wait方法時會釋放鎖 ;② 走完同步代碼塊時自動釋放鎖


    4. notify、notifyAll的區(qū)別
       a. 某個鎖對象的notify只會喚醒一個使用該鎖當鎖且處于wait狀態(tài)的線程;
       b. 某個鎖對象的notifyAll方法會把所有使用該鎖當鎖且處于wait狀態(tài)的線程都喚醒;
   使用建議: 為了防止某些線程無法被通知到,建議都使用notifyAll。

以上是“ wait、notify、notifyAll有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI