多執行緒併發工具類

2021-10-01 12:28:53 字數 1394 閱讀 3531

countdownlatch,cyclicbarrier,semaphore,exchanger

countdownlatch,用於乙個或多個執行緒等待其他執行緒完成操作。構造器中的計數值(count)實際上就是閉鎖需要等待的執行緒數量。這個值只能被設定一次,主線程在啟動其他執行緒後立即呼叫countdownlatch.await()方法。這樣主線程的操作就會在這個方法上阻塞,直到其他執行緒完成各自的任務。

聽到這樣的描述,相信有很多讀者聯想到了join方法,join的工作原理是,不停檢查thread是否存活,如果存活則讓當前執行緒永遠wait,直到thread執行緒終止,執行緒的this.notifyall 就會被呼叫。但是join與countdownlatch還是存在著不少區別。join必須等到整個執行緒結束才行,但是countdownlatch只要等到某一條件達成即可:

public class joinword implements runnable

}public class jointest thread-0first work

thread-1first work

mainsecond work

public class work implements runnable

@override

public void run() catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+":third work");

}public class countdownlatchtest

}mainsecond work

thread-0:first work

thread-1:first work

thread-1:third work

thread-0:third work

可以實現讓一組執行緒等待至某個狀態之後再全部同時執行,且可以重用。countdownlatch : 乙個執行緒(或者多個), 等待另外n個執行緒完成某個事情之後才能執行。 cyclicbarrier : n個執行緒相互等待,任何乙個執行緒完成之前,所有的執行緒都必須等待。相比較而言,countdownlatch是乙個倒計時計數器,cyclicbarrier是乙個水閘。使用方法,通過乙個int引數構造乙個cyclicbarrier 。各個執行緒直接使用await進行等待。

public class work1 implements runnable

@override

public void run() catch (exception e)

system.out.println(thread.currentthread().getname()+":third work");

}public class countdownlatchtest

}[1]:

多執行緒併發工具類

一 fork join 什麼是分而治之?規模為n的問題,n 閾值,直接解決,n 閾值,將n分解為k個小規模子問題,子問題互相對立,與原問題形式相同,將子問題的解合併得到原問題的解。fork join使用兩個類來完成以上兩件事情 forkjointask 我們要使用forkjoin框架,必須首先建立乙...

多執行緒 多執行緒之併發工具類

jdk 1.5 後,為我們提供的併發工具類有 名稱描述詳細 countdownlatch同步計數器 初始化時,傳入需要計數的執行緒等待數,並用 await 阻塞當前執行緒,其他執行緒中可以呼叫 countdown 方法讓計數器減一,當計數器為 0 時,則放行 cyclicbarrier柵欄 讓一組執...

多執行緒 併發工具類之CyclicBarrier詳解

從字面意思理解,cyclicbarrier是回環屏障的意思,它可以讓一組執行緒全部達到乙個狀態後再全部同時執行。這裡之所以叫作回環是因為當所有等待執行緒執行完畢,並重置cyclicbarrier 的狀態後它可以被重用。之所以叫作屏障是因為執行緒呼叫await 方法後就會被阻塞,這個阻塞點就稱為屏障點...