arraylist线程不安全的例子
时间: 2024-06-10 13:09:19 浏览: 3
可以肯定地回答,ArrayList是线程不安全的,因为它不是同步的,当多个线程同时访问它时,可能会导致数据错乱或者抛出异常。一个线程在遍历数组的同时,另一个线程想要修改这个数组,就有可能导致ConcurrentModificationException异常。为了避免这种情况,可以使用线程安全的集合类,比如Vector,Collections.synchronizedList等。
相关问题
arraylist线程不安全例子
以下是一个关于ArrayList线程不安全的例子:
假设有两个线程同时对一个ArrayList进行操作,线程1要向ArrayList中添加元素,线程2要删除ArrayList中的元素。代码如下:
```
import java.util.ArrayList;
public class ArrayListThreadUnsafe {
public static void main(String[] args) throws InterruptedException {
ArrayList<Integer> list = new ArrayList<Integer>();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
list.add(1);
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
list.remove(0);
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(list);
}
}
```
在上面的例子中,线程1将要在1秒后向ArrayList中添加一个元素,线程2会尝试删除ArrayList中的第一个元素。由于ArrayList不是线程安全的,当线程1和线程2同时对ArrayList进行操作时,就可能会出现意想不到的结果。具体表现为:输出的list中可能只有1,也可能是空的,或者出现异常。
这是由于线程1和线程2可能同时修改了同一个位置的元素,导致其中一个操作失败或者产生异常。要解决这个问题,可以使用线程安全的集合,例如使用CopyOnWriteArrayList来代替ArrayList。
用一段程序证明ArrayList是线程不安全的
下面是一个简单的例子,证明了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在多线程环境下是线程不安全的。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)