import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.concurrent.CopyOnWriteArrayList;
public class ThreadSafeListExample {
// 使用 Collections.synchronizedList 包装 List 实现线程安全
public static void synchronizedListExample() {
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
// 在多线程环境下使用时,需要手动同步代码块
synchronized (syncList) {
for (String item : syncList) {
System.out.println(item);
}
}
}
// 使用 CopyOnWriteArrayList 实现线程安全
public static void copyOnWriteArrayListExample() {
List<String> cowList = new CopyOnWriteArrayList<>();
// 可以直接在多线程环境下使用,无需额外同步
cowList.add("Item 1");
cowList.add("Item 2");
for (String item : cowList) {
System.out.println(item);
}
}
public static void main(String[] args) {
synchronizedListExample();
copyOnWriteArrayListExample();
}
}
Collections.synchronizedList:
Collections.synchronizedList 是 Java 提供的一个工具方法,它可以将一个普通的 List 包装成线程安全的 List。List 的基本操作(如 add, remove)是线程安全的,但在进行迭代操作时,仍然需要手动同步代码块,以避免并发修改异常。CopyOnWriteArrayList:
CopyOnWriteArrayList 是 Java 并发包 (java.util.concurrent) 中提供的一种线程安全的 List 实现。add, remove)时创建一个新的底层数组副本,因此读操作不会被写操作阻塞,适合读多写少的场景。synchronizedList,CopyOnWriteArrayList 不需要额外的同步代码块,使用起来更加方便。上一篇:java的访问修饰符
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站