執行緒池中的worker類(未完)

2021-10-07 05:38:13 字數 1749 閱讀 6761

還沒認真看,先記下來這是乙個要看的點。

執行緒池中的每乙個執行緒都被封裝成乙個worker物件,threadpool維護的是一組worker物件。

//繼承aqs,並實現了runnable介面

private

final

class

worker

extends

abstractqueuedsynchronizer

implements

runnable

/** delegates main run loop to outer runworker */

//由於worker繼承了runnable介面,所以乙個worker物件在啟動時會呼叫worker類的run方法

public

void

run(

)// lock methods

//// the value 0 represents the unlocked state.

// the value 1 represents the locked state.

protected

boolean

isheldexclusively()

protected

boolean

tryacquire

(int unused)

return

false;}

protected

boolean

tryrelease

(int unused)

public

void

lock()

public

boolean

trylock()

public

void

unlock()

public

boolean

islocked()

void

interruptifstarted()

catch

(securityexception ignore)}}

}

final

void

runworker

(worker w)

catch

(runtimeexception x)

catch

(error x)

catch

(throwable x)

finally

}finally

} completedabruptly =

false;}

finally

}

private runnable gettask()

int wc =

workercountof

(c);

// are workers subject to culling?

boolean timed = allowcorethreadtimeout || wc > corepoolsize;if(

(wc > maximumpoolsize ||

(timed && timedout))&&

(wc >

1|| workqueue.

isempty()

))trycatch

(interruptedexception retry)

}}

執行緒池中的柵欄

多執行緒中有三個類,分別是countdownlatch,cyclicbarrier,semaphore。代表著執行緒中的柵欄。共享鎖。在一組執行緒中,乙個執行緒等待其他執行緒。我把它理解為門栓。檢視該類的資料結構圖如下圖一 圖一 有乙個靜態的內部類,sync繼承自aqs。使用例子 如下 classn...

執行緒池中的執行緒何時死亡?

runworker this gettask 其他介紹 面試被問到了,結果說的不清楚。回來看了下。檢視從workqueue中gettask,當非core執行緒空閒時間超過keepalivetime,timeunit指定的時間後,則退出 ps 超過空閒時間退出這個我是知道的,但是當時本能的認為不是問的...

執行緒池中如何確定執行緒的數目

我用c寫了乙個執行緒池,但是在寫的時候沒有考慮執行緒池中線程的數目,當初直接隨便設定了乙個執行緒的數目。但是在面試時,將常被問到如何設定執行緒池中線程的數目的?我也在網上了搜了一些資料,今天在這裡就說一下 如何設定執行緒池中線程的數目?執行緒池中線程的數目是跟執行緒池所要處理的任務性質有關的 任務的...