【发布时间】:2019-11-08 09:43:28
【问题描述】:
可以将元素添加到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 的所有元素,但这不起作用。我怎么能做到这一点?也许我应该在这段代码中放置同步块,但我应该在哪里?
【问题讨论】:
-
你所说的“得到通知”是什么意思?
-
我的意思是,在我阅读它们时,添加到其他线程中的元素将在主线程中可用。即在开始时我在arraylist中有4个元素。我正在统计迭代。但它不会在 4 停止,而是一直持续到 9。
标签: java multithreading arraylist