我有多線程環境中沒有邏輯問題的情況,但是我擔心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-loop(或迭代器)會因爲元素數量的變化而崩潰嗎?
請參閱:http://stackoverflow.com/questions/4517653/thread-safe-iteration-over-a-collection – pedromss