怎麼得到多執行緒的運算結果並處理

2022-09-12 06:36:18 字數 1163 閱讀 4107

最近參加了乙個學校的程式設計比賽,為了解決運算速度使用了多執行緒,但是乙個問題難倒我了,那就是怎麼獲取多執行緒的運算結果並作處理呢?檢視的很多部落格也沒有得到滿意的答案。

一下幾種方案我都沒有成功,可能是我的使用有問題,如果有人看到感謝你們指出

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.競態條件 當兩個執行緒同時訪問乙個物件時,無法 哪個執行緒先執行,哪個執行...