多线程向list中添加元素,如何保证线程安全
时间: 2024-03-19 20:44:52 浏览: 55
C#多线程List的非线程安全性
4星 · 用户满意度95%
要保证多线程向List中添加元素的线程安全,可以使用以下方法:
1.使用线程安全的List实现,例如`CopyOnWriteArrayList`、`ConcurrentLinkedQueue`等。
2.使用`synchronized`关键字来同步对List的访问,即在多线程访问List时,只允许一个线程进行操作。
下面是一个使用`synchronized`关键字来同步对List的访问的例子:
```java
import java.util.ArrayList;
public class ArrayListThreadSafetyExample {
public static void main(String[] args) throws InterruptedException {
ArrayList<Integer> list = new ArrayList<>();
Runnable r = () -> {
synchronized (list) {
for (int i = 0; i < 100000; i++) {
list.add(i);
}
}
};
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("List size: " + list.size());
}
}
```
在上述代码中,我们使用`synchronized`关键字来同步对List的访问。在添加元素时,我们使用`synchronized`关键字来锁定List,以确保只有一个线程能够访问该List。这样,在多线程环境下,我们就能够保证对List的访问是线程安全的。
阅读全文