向執行緒池提交任務

2022-02-19 07:29:17 字數 1860 閱讀 2376

(1)  threadpoolexetor#submit(callabletask)   有返回值

public

class

sumit1

};executorservice executor =executors.newsinglethreadexecutor();

future

future =executor.submit(callable);

try catch

(interruptedexception e)

catch

(executionexception e)

system.

out.println("

##########");

}}

(2) threadpoolexetor#submit(runnable task, t result)   有返回值,返回值是通過result間接獲取的

/*

* *

* * 在給submit傳遞引數時,第二個引數就是future的返回值,當傳遞的是"abc"時,從future獲取的也是"abc"

* * 假如在runnable的建構函式傳遞的和submit第二個引數是同乙個data

* ,則在runnable執行緒中對data的修改後,從future獲取結果後也可知道data修改的地方 */

public

class

submit2

}class

data

public

void

setname(string name)

}class

task implements runnable

public

void

run()

catch

(interruptedexception e)

data.setname(

"kevin");

}}

(3)threadpoolexetor#submit(runnable runnable)    沒有返回值,獲取的nulll

public

class

submit3

};executorservice executor =executors.newsinglethreadexecutor();

future

<?> future =executor.submit(runnable);

try

catch (interruptedexception |executionexception e)

system.

out.println("

#########");

}}

(4)threadpoolexetor#execute(runnable runnable)  

/*

* *

* 採用execute方法,執行任務的執行緒丟擲異常後,當前執行緒不能捕獲該異常 *

*/public

class

submit4

};executorservice executor =executors.newsinglethreadexecutor();

executor.execute(runnable);

system.

out.println("

########");

}}

如何選擇這幾種方式

當希望返回任務執行緒的結果時或者想知道任務執行緒有沒有發生異常,選擇submit方法

對任務執行緒是否發生異常不關心時,選擇execute方法

執行緒池 2 獲取任務結果,提交任務

第二部分是關於執行緒池主要兩個操作 1.提交乙個任務 2.獲取已提交任務的結果 提交任務函式 傳入乙個函式指標,乙個引數void 以及是否需要查詢返回值,如果不需要返回值效率會高些,如果選擇要查詢結果,但是任務完成後沒有獲取結果的話,會一直占用空間 如果是不需要返回值返回1,否則返回key,失敗返回...

執行緒池提交任務和執行任務原始碼解析(2)

因為篇幅太長所以分兩篇部落格進行說明,本文算是對 執行緒池提交任務和執行任務原始碼解析 的補充 第一篇部落格 執行緒池提交任務和執行任務原始碼解析 繼續execute 方法的說明 public void execute runnable command 執行緒池提交任務和執行任務原始碼解析 分析到這...

自定義執行緒池阻塞式提交任務

public class contentindexbuilder 這種拒絕執行策略在任務佇列滿後會使任務在呼叫執行緒中執行 這種方式可以避免任務無限制的迅速提交,同時避免任務的放棄 private final static int n threads 5 private final static i...