通过多个线程同时向未同步的ArrayList的对象添加元素可能引起的问题是什么?
通过多个线程同时向未同步的ArrayList的对象添加元素可能引起的问题是什么?
尝试使用具有多个线程的静态 ArrayList 运行一些实验,但找不到太多。
在这里,我预计在多线程环境中不同步ArrayList或类似对象的许多副作用。
任何显示副作用的好例子都是可观的。谢谢。
以下是我的小实验,运行顺利,没有任何例外。
我也想知道为什么它没有抛出任何 ConcurrentModificationException
?
import java.util.ArrayList;
import java.util.List;
public class Experiment {
static List<Integer> list = new ArrayList<Integer>();
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("A " + i);
new Thread(new Worker(list, "" + i)).start();
}
}
}
class Worker implements Runnable {
List<Integer> al;
String name;
public Worker(List<Integer> list, String name) {
this.al = list;
this.name = name;
}
@Override
public void run() {
while (true) {
int no = (int) (Math.random() * 10);
System.out.println("[thread " + name + "]Adding:" + no + "to Object id:" + System.identityHashCode(al));
al.add(no);
}
}
}