import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ThreadSafeSetExample {
public static void main(String[] args) {
// 使用 Collections.synchronizedSet 方法创建线程安全的 Set
Set<String> threadSafeSet = Collections.synchronizedSet(new HashSet<>());
// 添加元素到 Set
threadSafeSet.add("Element1");
threadSafeSet.add("Element2");
threadSafeSet.add("Element3");
// 遍历 Set 时需要进行同步,以确保线程安全
synchronized (threadSafeSet) {
for (String element : threadSafeSet) {
System.out.println(element);
}
}
// 或者使用并发包中的 CopyOnWriteArraySet
// 这种方式在读多写少的场景下性能较好
Set<String> copyOnWriteSet = new java.util.concurrent.CopyOnWriteArraySet<>();
copyOnWriteSet.add("Element1");
copyOnWriteSet.add("Element2");
copyOnWriteSet.add("Element3");
// 可以直接遍历,因为 CopyOnWriteArraySet 是线程安全的
for (String element : copyOnWriteSet) {
System.out.println(element);
}
}
}
Set 包装成线程安全的 Set 的一种方法。它通过内部加锁机制保证了线程安全性。Collections.synchronizedSet 创建的集合时,在遍历时仍然需要进行同步,以确保线程安全。java.util.concurrent 包中提供的一个线程安全的 Set 实现。它的特点是每次写操作(如添加、删除)都会创建一个新的底层数组副本,因此适用于读多写少的场景。上一篇:java object转date
下一篇:java fork join
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站