是否可以在迭代时向元素添加元素?
更具体地说,我想迭代一个集合,如果一个元素满足某个条件,我想在集合中添加一些其他元素,并确保迭代这些添加的元素.(我意识到这可能导致一个无终止的循环,但我很确定它不会在我的情况下.)
Sun 的Java教程表明这是不可能的:"请注意,这Iterator.remove是在迭代期间修改集合的唯一安全方法;如果在迭代进行过程中以任何其他方式修改基础集合,则行为未指定."
所以如果我不能用迭代器做我想做的事,你建议我做什么?
我有一个链表samples:
protected LinkedList<RawDataset> samples = new LinkedList<RawDataset>();
Run Code Online (Sandbox Code Playgroud)
我将元素添加到线程1中的列表中,如下所示:
this.samples.offer(data);
Run Code Online (Sandbox Code Playgroud)
我正在第二个线程中从中检索元素,如下所示:
public RawDataset retrieveSample() {
return this.samples.poll();
}
Run Code Online (Sandbox Code Playgroud)
这会被认为是线程安全的吗?即使线程1和2都在修改列表,它们只在列表的头部或尾部专门执行,对吧?
如果不是,任何人都可以指向我的Java API中的类poll/ offer并且肯定是线程安全的吗?
先感谢您.
BTW:Collections.synchronizedList(new LinkedList())不会让我访问offer/ poll.