タスクを分散するプログラムを作っています。次のようなコミュニケーターオブジェクトの配列リストがあります。
ArrayList<Workers>
ファイルを固定サイズのチャンクに分割し、さまざまなワーカーにディスパッチして、ファイルを処理しています。イテレータを使用して、チャンクをワーカーに均等に渡しています。通常、ワーカーよりも多くのチャンクがあるため、ワーカーの周りをループする必要があります。これを行うにはどうすればよいですか。現在のソリューションでは、イテレータを使用しています。
private Worker getNextWorker() {
if (workerIterator == null)
workerIterator = workers.iterator();
if (!workerIterator.hasNext())
workerIterator = workers.iterator();
return workerIterator.next();
}
メソッドを同期し、メソッドが配列リストを変更しますが、別のスレッドが入ってイテレータ呼び出しの間にコレクションを変更する可能性があるため、これは安全ではありません。したがって、ファイル分割プロセス全体を同期して、1 つの大きなアトミック ステートメントにしました。
1) 何か見逃したことはありますか?
2)この機能をループすることができる別の、おそらくより良い方法はありますか。