相关疑难解决方法(0)

在迭代期间向集合添加元素

是否可以在迭代时向元素添加元素?

更具体地说,我想迭代一个集合,如果一个元素满足某个条件,我想在集合中添加一些其他元素,并确保迭代这些添加的元素.(我意识到这可能导致一个无终止的循环,但我很确定它不会在我的情况下.)

Sun 的Java教程表明这是不可能的:"请注意,这Iterator.remove是在迭代期间修改集合的唯一安全方法;如果在迭代进行过程中以任何其他方式修改基础集合,则行为未指定."

所以如果我不能用迭代器做我想做的事,你建议我做什么?

java iterator

76
推荐指数
5
解决办法
13万
查看次数

当我使用offer和poll进行访问时,LinkedList是否是线程安全的?

我有一个链表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.

java multithreading linked-list list thread-safety

23
推荐指数
2
解决办法
5万
查看次数