是否可以在其他线程同时向arraylist中添加元素,同时读取arraylist,并获得有关此更改的通知?
例如,我在主线程中有一个arraylist。有4个元素:
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
同时,其他线程在同一列表中添加元素:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 5; i < 10; i++) {
list.add(i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.start();
现在我开始像这样阅读它们:
for (int i : list) {
System.out.println(i);
Thread.sleep(2000);
}
我想读取1到9的所有元素,但这是行不通的。我怎样才能做到这一点?也许我应该在代码中放入同步块,但是我应该在哪里?