Java線程池相關(guān)類解釋,整理自Java文檔

接口Executor:

一個可以執(zhí)行被提交的Runnable的對象。該接口提供了一種任務(wù)提交的解耦方案,體現(xiàn)在每個task如何運行,使用,調(diào)度等。
Executor接口并不嚴(yán)格要求task的執(zhí)行過程是異步的,在最簡單的情況下,一個Executor可以直接將task放在調(diào)用者的線程中執(zhí)行:

class DirectExecutor implements Executor{
  public void execute(Runnable r){
    r.run();
  }
}

但更常見的情況一般是:task會被放置在其他線程而非調(diào)用者線程執(zhí)行。
許多Executor接口的實現(xiàn)會給task如何以及何時被調(diào)用加上限制。

void execute(Runnable command);

Runnable可在新線程,線程池,或者調(diào)用者線程執(zhí)行。

接口ExecutorService(Executor的拓展)

是一個提供了termination和返回Future來追蹤一個或多個異步tasks的對象。

termination:指executor沒有正在執(zhí)行的task,沒有等待執(zhí)行的task,且沒有新的task可以被接收。

shutdown();新的task不再被接收,已提交的task會執(zhí)行完畢,重復(fù)調(diào)用該方法沒有其他效果。該方法不會阻塞調(diào)用者線程來等待task去執(zhí)行完畢,若要阻塞當(dāng)前線程,該調(diào)用awaitTermination();

shutdownNow();嘗試停止所有正在執(zhí)行的task,停止正在等待的task,返回等待執(zhí)行的task的List<Runnable>。但并不保證能成功停止正在執(zhí)行的線程,因為該方法的實現(xiàn)一般就是用Thread#interrupt(),那么就要求線程本身就能正確根據(jù)interrupt()方法來停止自身。

isShutdown()返回true如果調(diào)用過shutdown()或者shutdownNow()

isTerminated();如果全部task都在調(diào)用shutdown()后完成了,將返回true,若調(diào)用isTerminated()之前沒有調(diào)用過shutdown()shutdownNow(),該方法永遠(yuǎn)返回false。

awaitTermination(long timeout,Timeunit unit) throws InterruptedExeption; 阻塞調(diào)用者的線程,直到所有task在shutdown后完成,或者timeout超時,或者當(dāng)前線程被interrupted。

Future<T> submit(Callable<T>)提交一個有返回值的任務(wù)(Callble)并返回一個Future對象。可通過Future#get()來返回任務(wù)處理完成的結(jié)果。若要為獲取一個任務(wù)的執(zhí)行結(jié)果而阻塞當(dāng)前調(diào)用者線程,可以

result=exec.submit(aCallable).get();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容