Java中的5種同步輔助類

來源:互聯網
上載者:User

標籤:

當你使用synchronized關鍵字的時候,是通過互斥器來保障安全執行緒以及對共用資源的同步訪問。線程間也經常需要更進一步的協調執行,來完成複雜的並發任務,比如wait/notify模式就是一種在多線程環境下的協調執行機制。

通過API來擷取和釋放鎖(使用互斥器)或者調用wait/notify等方法都是底層調用的方式。進一步來說,有必要為線程同步建立更高層次的抽象。通常用到的同步輔助類,就是對2個或多個線程間的同步活動機製做進一步封裝,其內部原理是通過使用現有的底層API來實現複雜的線程間的協調。

 

有5種同步輔助類適用於常見的同步情境

1. Semaphore 訊號量是一類經典的同步工具。訊號量通常用來限制線程可以同時訪問的(物理或邏輯)資源數量。

2.CountDownLatch 一種非常簡單、但很常用的同步輔助類。其作用是在完成一組正在其他線程中執行的操作之前,允許一個或多個線程一直阻塞。

3.CyclicBarrier 一種可重設的多路同步點,在某些並發編程情境很有用。它允許一組線程互相等待,直到到達某個公用的屏障點 (common barrier point)。在涉及一組固定大小的線程的程式中,這些線程必須不時地互相等待,此時 CyclicBarrier 很有用。因為該 barrier在釋放等待線程後可以重用,所以稱它為迴圈的barrier。

4.Phaser 一種可重用的同步屏障,功能上類似於CyclicBarrier和CountDownLatch,但使用上更為靈活。非常適用於在多線程環境下同步協調分階段計算任務(Fork/Join架構中的子任務之間需同步時,優先使用Phaser)

5.Exchanger 允許兩個線程在某個匯合點交換對象,在某些管道設計時比較有用。Exchanger提供了一個同步點,在這個同步點,一對線程可以交換資料。每個線程通過exchange()方法的入口提供資料給他的夥伴線程,並接收他的夥伴線程提供的資料並返回。當兩個線程通過Exchanger交換了對象,這個交換對於兩個線程來說都是安全的。Exchanger可以認為是 SynchronousQueue 的雙向形式,在運用到遺傳演算法和管道設計的應用中比較有用。

Java中的5種同步輔助類

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.