我正在製作一個分配任務的程序。我有溝通對象的ArrayList像這樣:如何在java中以線程安全方式創建迭代器循環
ArrayList<Workers>
我通過文件工作我的方式,將其劃分爲固定大小的塊和分派到各個工人。我正在使用迭代器來均勻地將塊傳遞給工作人員。通常比工人更多的塊,所以我需要在我的工人周圍和周圍循環。我如何做到這一點,我現在的解決方案使用像這樣的迭代器。
private Worker getNextWorker() {
if (workerIterator == null)
workerIterator = workers.iterator();
if (!workerIterator.hasNext())
workerIterator = workers.iterator();
return workerIterator.next();
}
我同步的方法,以及這些方法修改的ArrayList但是,這並不使之安全作爲另一個線程可以進來和修改迭代器調用之間的集合。因此,我同步整個文件分割過程,使其成爲一個大的原子語句。
1)我錯過了什麼嗎?
2)是否有另一個,也許更好的方式,我可以這個循環功能。
你可能會更好地讓工人承擔任務,而不是將任務交給工人。也就是說,JDK中有幾種可用於此類事情的解決方案:Executors和ExecutorService,CompletionService ... – 2013-03-18 22:35:37
爲什麼不使用ExecutorService? – 2013-03-18 22:39:49
問題在於我所處理的文件很大,我分裂成大塊的原因是爲了避免內存問題。然而,如果我能以某種方式限制工作池的規模,並且阻止更多的工作直到工人拿出一些東西,這將是完美的。這可能嗎? – 2013-03-18 23:13:34