執行緒池新增任務工作
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...