我正在制作一个分配任务的程序。我有沟通对象的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