我正在創建一個線程池,因爲我不需要從我的線程輸出任何信息,所以我沒有使用期貨&Callables。但問題是,如果我不使用Futures,我看到threadpool正在丟失我提交的任務。奇怪的Java線程池行爲 - 失去任務,除非使用期貨
這裏是一個被失去任務 -
while(hasWorkToDo){
ThreadPoolExecutor.execute(new Worker());
System.out.println("Work submitted");
}
內,工人的()我的代碼結構,我在打印的run()執行的第一行「有工作」。
當我運行上面的代碼時,「獲得工作」的數量總是少於「工作提交」。
但是,當我改變我的代碼結構如下─
ArrayList<Future<String>> list = new ArrayList<Future<String>>();
while(hasWorkToDo){
Future<String> submit=ThreadPoolExecutor.submit(new Worker());
list.add(submit)
}
for (Future<String> f : list) {
f.get();
}
然後我看到很多次「有工作」等於「工作提交了」
這使我相信,除非我使用期貨&可調參數,線程池正在使用我正在提交的任務。
你以前見過這種行爲嗎?有沒有更好的方法來調試呢?
我已經關機()在錯誤的地方 – user837208 2012-04-11 08:01:50