多執行緒回憶總結錄 四 併發工具類

2021-10-14 15:31:28 字數 2360 閱讀 8669

1 fork/join介紹

​ forkjoin是實現多執行緒"分而治之"思想的框架,將乙個大任務分成多個乙個個小任務,然後對每個小任務執行平行計算,最後將結果合併起來。

1.2 fork/join使用

​ 在使用方面必須首先建立乙個forkjoin 任務。它提供在任務中執行fork 和join 的操作機制,通常不直接繼承forkjointask 類,只需要直接繼承其子類。

// 繼承recursiveaction的方式,不用返回值的方式

public

class

finddirsfiles

extends

recursiveaction

@override

protected

void

compute()

else}}

if(!subtasks.

isempty()

)}}}

public

static

void

main

(string [

] args)

system.out.

println

("main thread done sth......,otherwork="

+otherwork)

;// 阻塞方法,

task.

join()

; system.out.

println

("task end");

}catch

(exception e)

}

// 繼承recursivetask有返回值

public

class

myrecursivetask

extends

recursivetask

@override

protected integer compute()

return sum;

}else

}}

public

static

void

main

(string[

] args)

2. countdownlatch

2.1 countdownlatch是什麼?

​ countdownlatch這個類使乙個執行緒等待其他執行緒各自執行完畢後再執行。

​ 它是通過乙個計數器來實現的,計數器的初始值是執行緒的數量。每當乙個執行緒執行完畢後,計數器的值就-1,當計數器的值為0時,表示所有執行緒都執行完畢,然後在閉鎖上等待的執行緒就可以恢復工作了。

​ 如圖所示,乙個程式初始化需要五步,那就初始化countdownlatch為5,每個執行緒初始化結束就對其進行"減一"操作,直到值減為零之後,等待執行緒被喚醒,繼續執行主流程**。

2.2 countdownlatch使用場景

2.3 使用案例

public

class

usecountdownlatch}}

private

static

class

busithread

implements

runnable

catch

(interruptedexception e)

for(

int i =

0; i <

3; i++)}

}public

static

void

main

(string[

] args)

throws interruptedexception })

.start()

;new

thread

(new

busithread()

).start()

;for

(int i =

0; i <

3; i++

)// 多少時間之後,沒有執行就不阻塞,繼續執行下去

latch.

await(10

, timeunit.nanoseconds)

; system.out.

println

("main do ites work........");

}}

測試用例**見: [email protected]:oujie123/understandingofthread.gi

多執行緒併發工具類

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

多執行緒併發工具類

countdownlatch,cyclicbarrier,semaphore,exchanger countdownlatch,用於乙個或多個執行緒等待其他執行緒完成操作。構造器中的計數值 count 實際上就是閉鎖需要等待的執行緒數量。這個值只能被設定一次,主線程在啟動其他執行緒後立即呼叫coun...

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

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