【发布时间】:2014-09-18 02:12:08
【问题描述】:
我有一个列表,我会对其进行迭代并执行一些操作。可以执行的操作之一可能会导致工作被传递给另一个线程,这可能会在我仍在第一个线程中对其进行迭代时将更多元素添加到我的列表中。
有没有办法让我以迭代器包含来自其他线程的添加的方式遍历列表?
这是一些伪 Java
Class1{
List multiThreadList = getMyList(); //points to list in Class2
for(Element element:multiThreadList)
//perform some actions, these actions may results in another thread being called
//which will cause addToMyList() to be called while I'm still iterating over it
//I want to keep iterating if an element gets added on the other thread
}
Class2{
List originalList = new ArrayList();
public getMyList()
return originalList;
void addToMyList(Element element)
originalList.add(element);
}
【问题讨论】:
-
你能提供一些代码吗?
-
您可以将列表转换为数组,您可以在列表周围放置共享锁。您可以使用同步列表
-
这真的取决于你的具体要求,你可能不用锁就能逃脱,你可能需要锁。迭代过程中是否可以从列表中删除,紧随其后,
addToMyList是否需要很长时间才能将内容添加到列表中? -
@MateuszDymczyk 在迭代期间没有删除列表,只有添加,addToMyList 可能需要很长时间,这就是我不想等待任意时间单位的原因
标签: java multithreading concurrency