【发布时间】:2014-03-18 20:59:52
【问题描述】:
我在多线程环境中遇到一种情况,没有逻辑问题,但我担心 java Set 的迭代器是否会在某些极端情况下中断。我不知道这是否会在一段时间后崩溃:
class Bar{
AtomicLong a = 0;
AtomicLong b = 0;
public void addA(int value){
a.addAndGet(value);
}
public void addB(int value){
b.addAndGet(value);
}
}
class Foo{
Set<Bar> bars = new CopyOnWriteArraySet();
public void addBarData(Bar bar){
if (!bars.add(bar)){
for (Bar b: bars){
if (bar.equals(b)){
b.addA(bar.a);
b.addB(bar.b);
}
}
}
}
}
问题可能是如果两个线程在不久的时间调用 addBarData(barInstance),一个正在进入 ifs 主体,并开始迭代 for-each,但另一个此时将另一个元素添加到集合中。 for循环(或迭代器)是否会因为元素数量的变化而崩溃?
【问题讨论】:
标签: java multithreading for-loop iterator