日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多线程笔记补充之线程通信wait和notify方法以及Lock和Condition接口的使用

發布時間:2024/8/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程笔记补充之线程通信wait和notify方法以及Lock和Condition接口的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

線程通信-wait和notify方法介紹:

java.lang.Object類提供類兩類用于操作線程通信的方法.

wait():執行該方法的線程對象釋放同步鎖,JVM把該線程存放到等待池中,等待其他的線程喚醒該線程.

notify:執行該方法的線程喚醒在等待池中等待的任意一個線程,把線程轉到鎖池中等待.

notifyAll():執行該方法的線程喚醒在等待池中等待的所有的線程,把線程轉到鎖池中等待.

注意:上述方法只能被同步監聽鎖對象來調用,否則報錯IllegalMonitorStateException..

------------------------------------------

假設A線程和B線程共同操作一個X對象(同步鎖),A,B線程可以通過X對象的wait和notify方法來進行通信,流程如下:

1:當A線程執行X對象的同步方法時,A線程持有X對象的鎖,B線程沒有執行機會,B線程在X對象的鎖池中等待.

2:A線程在同步方法中執行X.wait()方法時,A線程釋放X對象的鎖,進入A線程進入X對象的等待池.

3:在X對象的鎖池中等待鎖的B線程獲取X對象的鎖,執行X的另一個同步方法.

4:B線程在同步方法中執行X.notify()方法時,JVM把A線程從X對象的等待池中移動到X對象的鎖池中,等待獲取鎖.

5:B線程執行完同步方法,釋放鎖.A線程獲得鎖,繼續執行同步方法.


線程通信-使用Lock和Condition接口:

waitnotify方法,只能被同步監聽鎖對象來調用,否則報錯IllegalMonitorStateException.

那么現在問題來了,Lock機制根本就沒有同步鎖了,也就沒有自動獲取鎖和自動釋放鎖的概念.

因為沒有同步鎖,所以Lock機制不能調用wait和notify方法.

解決方案:Java5中提供了Lock機制的同時提供了處理Lock機制的通信控制的Condition接口.

--------------------------------------------------------------------

從Java5開始,可以:

????? 1):使用Lock機制取代synchronized代碼塊和synchronized 方法.

????? 2):使用Condition接口對象的await,signal,signalAll方法取代Object類中的wait,notify,notifyAll方法.




總結

以上是生活随笔為你收集整理的多线程笔记补充之线程通信wait和notify方法以及Lock和Condition接口的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。