還沒認真看,先記下來這是乙個要看的點。
執行緒池中的每乙個執行緒都被封裝成乙個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寫了乙個執行緒池,但是在寫的時候沒有考慮執行緒池中線程的數目,當初直接隨便設定了乙個執行緒的數目。但是在面試時,將常被問到如何設定執行緒池中線程的數目的?我也在網上了搜了一些資料,今天在這裡就說一下 如何設定執行緒池中線程的數目?執行緒池中線程的數目是跟執行緒池所要處理的任務性質有關的 任務的...