用一段程序证明ArrayList是线程不安全的
时间: 2024-03-19 10:44:45 浏览: 54
下面是一个简单的例子,证明了ArrayList在多线程环境下是线程不安全的:
```java
import java.util.ArrayList;
public class ArrayListThreadSafetyExample {
public static void main(String[] args) throws InterruptedException {
ArrayList<Integer> list = new ArrayList<>();
// 创建两个线程,同时向list中添加元素
Thread t1 = new Thread(() -> {
for (int i = 0; i < 100000; i++) {
list.add(i);
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 100000; i++) {
list.add(i);
}
});
t1.start();
t2.start();
// 等待两个线程执行完毕
t1.join();
t2.join();
// 输出list的大小
System.out.println("List size: " + list.size());
}
}
```
上述程序中,我们创建了两个线程,同时向一个ArrayList中添加元素。由于ArrayList的内部实现并不是线程安全的,因此在多线程环境下,会发生竞争条件,导致数据的不一致性。运行该程序,输出结果可能会不同,例如:
```
List size: 164663
```
或者
```
List size: 169110
```
因此,可以看出ArrayList在多线程环境下是线程不安全的。
阅读全文