Почему каждый поток не добавляет объект в CopyOnWriteArrayList одновременно? - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь добавить myObject в CopyOnWriteArrayList одновременно, но после того, как объект списка выполнения становится нулевым.

import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class NMain {
    private static CopyOnWriteArrayList<MyClass> list;

    public static void main(String[] args) {
        final ExecutorService EXECUTOR_SERVICE = Executors.  newFixedThreadPool(Runtime.getRuntime() .availableProcessors());
        try {
            submit(EXECUTOR_SERVICE);
        }
        catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        EXECUTOR_SERVICE.shutdown();
        try {
            EXECUTOR_SERVICE.awaitTermination(10 * 2000,   TimeUnit.MILLISECONDS);
        }
        catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    }

    private static void submit(ExecutorService exe) throws InterruptedException  {
        for(int i=0; i<50; i++) {
            exe.submit(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000);
                        MyClass myObject = new MyClass();
                        list.add(myObject);

                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
}

С MyClass все в порядке.Та же проблема будет с, например, Integer.

...