hooyantsing's Blog

12_CopyOnWriteArraySet

字数统计: 211阅读时长: 1 min
2020/08/26

12 CopyOnWriteArraySet

狂神说Java JUC并发编程最新版通俗易懂

HashSet 是线程不安全的

使Set线程安全的两种方式

  • Set<String> set = Collections.synchronizedSet(new HashSet<>()); 不安全Set 转 安全Set
  • Set<String> set = new CopyOnWriteArraySet<>(); 直接使用线程安全的 Set

    案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package unsafe;

import java.util.*;
import java.util.concurrent.CopyOnWriteArraySet;

public class SetTest {
public static void main(String[] args) {
/**
* 解决方案:
* 1.Set<String> set = Collections.synchronizedSet(new HashSet<>()); 不安全Set 转 安全Set
* 2.Set<String> set = new CopyOnWriteArraySet<>(); 直接使用线程安全的 Set
*/

Set<String> set = new HashSet<>();
for (int i = 0; i < 10; i++) {
new Thread(
() -> {
set.add(UUID.randomUUID().toString().substring(0,5));
System.out.println(set);
},String.valueOf(i)
).start();
}
}
}

初窥 HashSet

HashSet 底层是 HashMap

HashSet add 方法

Map的key用来存放入的对象,value用一个Object占位。

CATALOG
  1. 1. 12 CopyOnWriteArraySet
    1. 1.1. 使Set线程安全的两种方式
      1. 1.1.1. 案例
      2. 1.1.2. 初窥 HashSet
        1. 1.1.2.1. HashSet add 方法