欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java并發(fā)編程之CountDownLatch解析

 更新時間:2023年12月20日 10:00:07   作者:Brain_L  
這篇文章主要介紹了Java并發(fā)編程之CountDownLatch解析,Sync為一個實現(xiàn)了AQS的內(nèi)部類,代理CountDownLatch的獲取和釋放操作,需要所有線程等待某個條件完成后,才執(zhí)行某個動作時,可以使用CountDownLatch,需要的朋友可以參考下

Java的CountDownLatch

ReentrantLock為獨占鎖,也即排他鎖,同一時刻只能有一個線程持有鎖。現(xiàn)在來看幾種共享鎖。

CountDownLatch

public CountDownLatch(int count) {
        if (count < 0) throw new IllegalArgumentException("count < 0");
        this.sync = new Sync(count);
}
private final Sync sync;
private static final class Sync extends AbstractQueuedSynchronizer {
        private static final long serialVersionUID = 4982264981922014374L;
        Sync(int count) {
            //設置資源總數(shù)
            setState(count);
        }
        int getCount() {
            return getState();
        }
        protected int tryAcquireShared(int acquires) {
            //資源
            return (getState() == 0) ? 1 : -1;
        }
        protected boolean tryReleaseShared(int releases) {
            // Decrement count; signal when transition to zero
            for (;;) {
                //1、獲取當前資源數(shù)
                int c = getState();
                if (c == 0)
                    return false;
                //2、釋放一個資源
                int nextc = c-1;
                //3、CAS更新資源數(shù)
                if (compareAndSetState(c, nextc))
                    return nextc == 0;
            }
        }
    }

生成CountDownLatch時需要傳入資源總數(shù),代表所有線程總共享有這么多資源。

Sync為一個實現(xiàn)了AQS的內(nèi)部類,代理CountDownLatch的獲取和釋放操作。

public void await() throws InterruptedException {
        sync.acquireSharedInterruptibly(1);
    }
public void countDown() {
        sync.releaseShared(1);
    }

線程調(diào)用countDown時,最終調(diào)用Sync中的tryReleaseShared,將總資源減1。

調(diào)用await時,最終調(diào)用Sync中tryAcquireShared,看資源是否全部釋放完。

需要所有線程等待某個條件完成后,才執(zhí)行某個動作時,可以使用CountDownLatch。

到此這篇關于Java并發(fā)編程之CountDownLatch解析的文章就介紹到這了,更多相關Java的CountDownLatch內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring Boot與Kotlin定時任務的示例(Scheduling Tasks)

    Spring Boot與Kotlin定時任務的示例(Scheduling Tasks)

    這篇文章主要介紹了Spring Boot與Kotlin定時任務的示例(Scheduling Tasks),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • springboot2?使用activiti6?idea插件的過程詳解

    springboot2?使用activiti6?idea插件的過程詳解

    這篇文章主要介紹了springboot2?使用activiti6?idea插件,本文通過截圖實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 深入解析Java的Servlet過濾器的原理及其應用

    深入解析Java的Servlet過濾器的原理及其應用

    這篇文章主要介紹了深入解析Java的Servlet過濾器的原理及應用,Java編寫的Servlet通常是一個與網(wǎng)頁一起作用于瀏覽器客戶端的程序,需要的朋友可以參考下
    2016-01-01
  • 深入分析JAVA Synchronized關鍵字

    深入分析JAVA Synchronized關鍵字

    這篇文章主要介紹了析JAVA Synchronized關鍵字的相關知識,文中代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • Mybatis傳遞多個參數(shù)進行SQL查詢的用法

    Mybatis傳遞多個參數(shù)進行SQL查詢的用法

    本文給大家介紹Mybatis傳遞多個參數(shù)進行SQL查詢的用法的相關知識,本文還給大家介紹了mybatis通過Map傳遞多個參數(shù)和JavaBean傳遞多個參數(shù),本文介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-06-06
  • 詳解spring security安全防護

    詳解spring security安全防護

    這篇文章主要介紹了詳解spring security安全防護,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Spring Boot的Profile配置詳解

    Spring Boot的Profile配置詳解

    本篇文章主要介紹了Spring Boot的Profile配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 解決IDEA無法下載maven依賴的問題

    解決IDEA無法下載maven依賴的問題

    這篇文章主要介紹了解決IDEA無法下載maven依賴的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • java如何實現(xiàn)數(shù)位分離

    java如何實現(xiàn)數(shù)位分離

    這篇文章主要介紹了java如何實現(xiàn)數(shù)位分離,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • springboot配置ssl后啟動一直是端口被占用的解決

    springboot配置ssl后啟動一直是端口被占用的解決

    這篇文章主要介紹了springboot配置ssl后啟動一直是端口被占用的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論