最近參加了乙個學校的程式設計比賽,為了解決運算速度使用了多執行緒,但是乙個問題難倒我了,那就是怎麼獲取多執行緒的運算結果並作處理呢?檢視的很多部落格也沒有得到滿意的答案。
一下幾種方案我都沒有成功,可能是我的使用有問題,如果有人看到感謝你們指出
1.使用帶有返回值的callable和接收返回值的future
但是使用多個執行緒同時持有乙個futuretask進行運算
執行緒池使用futuretask時候需要注意的一點事
callable> task = new task(resultmap2);
futuretask> future = new futuretask>(
task);
int n = 10;
thread threads = new thread[n];
for (int i = 0; i < n; i++)
失敗
2.使用join()方法,但是這樣子執行緒併入主線程和單執行緒有什麼區別
失敗3.使用cyclicbarrier
executorservice service = executors.newcachedthreadpool();
final cyclicbarrier cb = new cyclicbarrier(10, new runnable()
}});
設定每10個執行緒處理一次結果,但是這樣的話儲存運算結果的集合就會以直被處理結果的runnable占用
失敗4.某日突然靈光一閃
使用while(flag)一直使主線程不結束
while (flag) );
createxcel.createxcel(lists, titles, "xlsx", "企業資訊表").write(os);
os.close();
long millis2 = system.currenttimemillis();
system.out.println("(millis2 - millis1)---結束-------->"
+ (millis2 - millis1));
flag = false;
break;
}}
在所有的結果運算結束後flag=flase
成功
怎麼得到多執行緒的運算結果並處理
最近參加了乙個學校的程式設計比賽,為了解決運算速度使用了多執行緒,但是乙個問題難倒我了,那就是怎麼獲取多執行緒的運算結果並作處理呢?檢視的很多部落格也沒有得到滿意的答案。一下幾種方案我都沒有成功,可能是我的使用有問題,如果有人看到感謝你們指出 1.使用帶有返回值的callable和接收返回值的fut...
多執行緒 批量獲取多條執行緒的執行結果
當向執行緒池提交callable任務後,我們可能需要一次性獲取所有返回結果,有三種處理方法。建立乙個執行緒池 executorservice executorservice executors.newfixedthreadpool 10 儲存執行結果的list list results new ar...
多執行緒處理的問題
執行緒處理的問題 1.非原子操作 原子操作指乙個操作要麼尚未開始,要麼已經完成 而非原子操作則有可能出現中間態,即部分完成的情況。c 語音通常認為所以操作都是非原子性的,在多執行緒環境中,操作的非原子性可能會造成競態條件。2.競態條件 當兩個執行緒同時訪問乙個物件時,無法 哪個執行緒先執行,哪個執行...