- 使用
Collections.synchronizedList
方法
- 原理:
Collections.synchronizedList
方法返回一个同步的List
包装器,对List
的所有操作(如添加、删除、获取元素等)都通过synchronized
关键字进行同步,确保在同一时间只有一个线程能够访问该List
,从而保证线程安全。
- 适用场景:适用于对线程安全要求较高,且对性能要求不是极致苛刻的场景。这种方式简单易用,不需要对原有代码进行大幅度修改。示例代码如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SynchronizedListExample {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<>();
List<String> synchronizedList = Collections.synchronizedList(arrayList);
// 多线程操作synchronizedList
}
}
- 使用
CopyOnWriteArrayList
- 原理:
CopyOnWriteArrayList
在进行写操作(如添加、删除元素)时,会先复制一份原数组,在新的数组上进行操作,操作完成后再将原数组引用指向新数组。读操作(如获取元素)则直接读取原数组,由于读操作不会修改数组,所以不需要加锁,读写分离,提高了并发性能。
- 适用场景:适用于读多写少的场景,因为写操作需要复制数组,开销较大。示例代码如下:
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class CopyOnWriteArrayListExample {
public static void main(String[] args) {
List<String> copyOnWriteArrayList = new CopyOnWriteArrayList<>();
// 多线程操作copyOnWriteArrayList
}
}