-1

HiddenInterator の例を、Java 同時実行の実践書で見つけました。

class ConcurentIterator implements Runnable {
    // because of final it is immutable, so it is thread safe
    private final Set<Integer> v = new HashSet<Integer>();
    //private final Vector<Integer> v = new Vector<Integer>();

    public synchronized void add(Integer i) {
        v.add(i);
    }

    public synchronized void remove(Integer i) {
        v.remove(i);
    }

    public void addTenThings() {
        Random r = new Random();
        for (int i = 0; i < 10; i++) {
            add(r.nextInt());
            System.out.println("DEBUG: added ten elements to " + v);
        }
    }

    public void run() {
        addTenThings();
    }
}

私はすべてを理解しています!それはすばらしい!

次の質問があります。

Java では、ConcurentSkipListMap、ConcurrentHashMap などの同時コレクションがあり、問題は修正されています。しかし、問題が発生する可能性のあるクラスはどれですか(修正されていない場所)? たとえば、ベクターで発生する可能性はありますか? 私がテストしていたとき、ベクトルで ConcurentModificationException をスローできませんでした。

試験方法:

public static void main(String[] args) {

    Thread[] threadArray = new Thread[200];
    ConcurentIterator in = new ConcurentIterator();

    for (int i = 0; i < 100; i++) {
        threadArray[i] = new Thread(in);
    }

    for (int i = 0; i < threadArray.length; i++) {
        threadArray[i].start();
    }

}
4

1 に答える 1