簡體   English   中英

我不懂主題

[英]I don't understand threads

假設我有個功能

Data[] foo(double[] someNumbers, Data[] someData, AnalyzeTool tool, int numOfThreads)

,數組的長度len相同。

現在,我想使用工具在該方法中調用numOfThreads線程,以處理每個Data.Object,並將其另一個寫回到Data []中,以使給定的Data []和寫入的Data []保持順序。

假設一個線程現在已經完成了對一個數據對象的處理,我如何告訴該線程,還有剩余的數據尚未處理,請分配並“鎖定”下一個數據對象進行處理? “鎖定”應防止數據對象被多個線程多次處理。

有人舉個例子嗎? 歡迎任何形式的建設性幫助。

它將使用JDK 8和流來完成。 我在想像這樣的事情:

List<Data> foo(List<Double> someNumbers, List<Data> someData, AnalyzeTool tool) {
    return someData.parallelStream().map((t, n) -> t.doSomething(n)).collect(Collectors.toList());
}

作為多線程的新手,以我的經驗,我會做這樣的事情:

考慮到我每個Data []項目都有很多任務要做。 讓我們說每個數據項都是一件作品。

ExecutorService為您提供了一個工廠,工廠里有一組工作人員(線程池)來幫助您完成所有工作,Executor服務會在工作人員中的任何一個完成后立即將工作分配給每個工作人員(線程)。 ,還有更多工作要做,並為此分配了工作。

考慮以下示例:

ExecutorService executor = Executors.newFixedThreadPools(5);
//lets say we have 5 workers with us.

//then submitting all your work (a runnable) to the factory
for(int i=0;i<n;i++){
    executor.submit(new work(someData[i]));
}

執行程序將在您提交時開始進行工作,然后從池中拾取下一個。。。依此類推。

就在那時

executor.shutdown();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM