用一段程序证明ArrayList是线程不安全的
时间: 2023-06-01 19:05:44 浏览: 105
深入线程安全容器的实现方法
以下是一个多线程操作ArrayList的程序,证明ArrayList是线程不安全的:
```
import java.util.ArrayList;
public class ArrayListThreadUnsafeDemo implements Runnable {
private static ArrayList<Integer> list = new ArrayList<>();
public void run() {
for (int i = 0; i < 10000; i++) {
list.add(i);
}
}
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(new ArrayListThreadUnsafeDemo());
Thread t2 = new Thread(new ArrayListThreadUnsafeDemo());
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("List size: " + list.size());
}
}
```
在上面的程序中,我们开启了两个线程来并发地往ArrayList中添加元素,由于ArrayList不是线程安全的,可能会出现同时修改一个位置的情况,导致写入的元素不稳定。
运行以上程序,有时会输出异常信息,有时会输出错误的List size。因此,我们可以得出结论:ArrayList是线程不安全的。
阅读全文