執行緒池1 新增任務execute 方法解析

2021-10-03 13:08:36 字數 1987 閱讀 4351

執行緒池新增任務工作

public

void

execute

(runnable command)

//來到這一步,核心執行緒數已經達到上限,若還是執行狀態,則把任務新增到阻塞佇列中if(

isrunning

(c)&& workqueue.

offer

(command)

)elseif(

!addworker

(command,

false))

reject

(command)

;}

該方法中最重要的方法:addworker(command, true)

//firsttask 任務   core 為true 新增的是核心執行緒,為false 新增的是非核心執行緒

private

boolean

addworker

(runnable firsttask,

boolean core)

}//標識執行緒是否啟動成功

boolean workerstarted =

false

;//標識工作任務work是否新增到 works集合中

boolean workeradded =

false

; worker w = null;

try}

finally

//新增成功 啟動執行緒

if(workeradded)}}

finally

//返回啟動標識。

return workerstarted;

}

該方法中最重要的是:new worker(firsttask);

private

final

class

worker

extends

abstractqueuedsynchronizer

implements

runnable

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

//當在addworker 方法中 啟動執行緒的時候,執行該run方法。

public

void

run().

....

.

該方法中最重要的是: runworker(this);

final

void

runworker

(worker w)

catch

(runtimeexception x)

catch

(error x)

catch

(throwable x)

finally

}finally

} completedabruptly =

false;}

finally

}

該方法中最重要的方法是:gettask()

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)

}}

執行緒池 execute與submit的區別

在使用執行緒池的時候,看到execute 與submit 方法。都可以使用執行緒池執行乙個任務,但是兩者有什麼區別呢?void execute runnable command futuresubmit callabletask futuresubmit runnable task,t result...

執行緒池的submit和execute方法區別

1.接收的引數不一樣 2.submit 有返回值,而execute 沒有 例如,有個validation的task,希望該task執行完後告訴我它的執行結果,是成功還是失敗,然後繼續下面的操作。3.submit 可以進行exception處理 例如,如果task裡會丟擲checked或者unchec...

執行緒池的submit和execute方法區別

1 接收的引數不一樣 2 submit有返回值,而execute沒有 用到返回值的例子,比如說我有很多個做validation的task,我希望所有的task執行完,然後每個task告訴我它的執行結果,是成功還是失敗,如果是失敗,原因是什麼。然後我就可以把所有失敗的原因綜合起來發給呼叫者。個人覺得c...