Java并發(fā)編程基礎(chǔ)

具體的Thread提供的方法就不介紹了,這里會介紹線程狀態(tài),并發(fā)涉及到的相關(guān)組件以及等待通知模型

線程的狀態(tài)

線程的狀態(tài)

需要注意等待狀態(tài)與阻塞狀態(tài)的區(qū)別,分別是進(jìn)入等待隊列同步隊列(后面會詳細(xì)講述這里的實現(xiàn)部分,個人理解鎖的核心就是這倆隊列)

synchronized關(guān)鍵字:保證了線程訪問的可見性和排他性

對象,監(jiān)視器,同步隊列,執(zhí)行線程的關(guān)系

正確的理解關(guān)系才能更好的理解實現(xiàn)。理清楚對象,監(jiān)視器,同步隊列,執(zhí)行線程的關(guān)系才能更好的深入實現(xiàn)部分理解
線程獲取監(jiān)視器對象成功則正常訪問,失敗則進(jìn)入同步隊列


等待/通知機制

它是基于同步機制提供了等待隊列的模式,其目的是為了確保等待線程從wait()方法返回時能夠感知到通知線程對變量做出的修改

有以下細(xì)節(jié)需要注意

  • 使用wait()、notify()和notifyAll()時需要先對調(diào)用對象加鎖。
  • 調(diào)用wait()方法后,線程狀態(tài)由RUNNING變?yōu)閃AITING,并將當(dāng)前線程放置到對象的 等待隊列。
  • notify()或notifyAll()方法調(diào)用后,等待線程依舊不會從wait()返回,需要調(diào)用notify()或 notifAll()的線程釋放鎖之后,等待線程才有機會從wait()返回。
  • notify()方法將等待隊列中的一個等待線程從等待隊列中移到同步隊列中,而notifyAll() 方法則是將等待隊列中所有的線程全部移到同步隊列,被移動的線程狀態(tài)由WAITING變?yōu)?BLOCKED。
  • 從wait()方法返回的前提是獲得了調(diào)用對象的鎖。


    WaitNotify運行過程

等待通知的經(jīng)典范式

等待方遵循如下原則。

  • 獲取對象的鎖。
  • 如果條件不滿足,那么調(diào)用對象的wait()方法,被通知后仍要檢查條件。
  • 條件滿足則執(zhí)行對應(yīng)的邏輯。

對應(yīng)的偽代碼如下。

synchronized(對象) {
     while(條件不滿足) {
          對象.wait();
     }
     // 對應(yīng)的處理邏輯
}

通知方遵循如下原則。

  • 獲得對象的鎖。
  • 改變條件。
  • 通知所有等待在對象上的線程。

對應(yīng)的偽代碼如下。

synchronized(對象) {
     // 改變條件
     對象.notifyAll();
}

這個經(jīng)典范式適用情況太多了

稍微改編一下就可以變?yōu)榈却瑫r模型

synchronized(對象) {
     long future = System.currentTimeMillis()+mills;
     long wait = mills;
     while(條件不滿足 && wait>0) {
          對象.wait();
          wait = future - System.currentTimeMillis()();
     }
     // 對應(yīng)的處理邏輯
}

依托于等待通知模型可以典型的構(gòu)建模型有

阻塞隊列(ArrayBlockedQueue(以ArrayList做中心),LinkedBlockedQueue(以LinkedList做中心))(這里還是很有價值的,下面會詳細(xì)的介紹)
數(shù)據(jù)庫連接池(以池對象作為中心)
線程池技術(shù)(以job隊列作為中心,實際中是直接使用阻塞隊列實現(xiàn)的)

其他

這里需要注意這個等待通知模型,它真的太屌了,后面介紹的鎖的實現(xiàn)部分會深入的介紹等待隊列,同步隊列。如果沒有很好的理解等待通知模型,那看實現(xiàn)部分感覺有點不切實際。還有WaitNotify運行過程那個圖也是很好能理解等待隊列,同步隊列

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容