2011-06-24 49 views
2

我正在實現一個具有多線程的並行性能關鍵算法。我將所有線程分配給一些數據。當全部那些線程已完成處理其數據,我分配所有線程的新數據,並繼續循環。 (這是我所說的線程「時鐘」,因爲它有點類似於CPU時鐘。)Java - 逐步線程

我到目前爲止使用的是使用存儲整數的主線程。在每個週期開始時,我將整數設置爲從屬線程的數量。當一個從線程完成時,它減少主線程的整數。一旦這個整數達到零,我開始一個新的循環。

這是一個好方法,還是有更有效的方法來做同樣的事情?

+1

正確的術語是階段性的:D –

+1

@Chris Dennett:謝謝,有時解決一個問題最難的部分是找出谷歌應該做些什麼;) – ryyst

+0

..只要遞減是線程安全的。 –

回答

3

我建議看一下java.util.concurrent包中的新類,特別是ThreadPoolTaskExecutor。如果你沒有看過java.lang.Thread以外的地方,你可能會重新發明輪子。

0

ExecutorService可以爲你做到這一點。

ExecutorService executor = Executors.newFixedThreadPool(10); 

do { 
    List<Callable> tasks = getNextTasksToExecute(); 
    executor.invokeAll(tasks); 
} while (tasks.size() > 0); 

這將創建一個包含10個線程的線程池。然後它會調用getNextTasksToExecute(),您應該自己實現以返回需要執行的下一組任務。它將在線程池中並行執行這些任務,然後繼續循環直到getNextTasksToExecute()不返回任務。

編輯:
代碼未經測試,認爲可能存在編譯錯誤,但您可以弄清楚。