证明HashSet、HashMap线程不安全、如何变成线程安全

证明HashSet、HashMap线程不安全、如何变成线程安全

(1)证明HashSet线程不安全

public static void main(String[] args) {
          
   
    Set<String> set = new HashSet<>();
    for (int i = 1; i <=30 ; i++) {
          
   
        new Thread(()->{
          
   
            set.add(UUID.randomUUID().toString().substring(0,8));
            System.out.println(set);
        },String.valueOf(i)).start();
    }

}

(2)HashSet线程安全改造

Set<String> set = new CopyOnWriteArraySet<>();

(3)证明HashMap线程不安全

public static void main(String[] args) {
          
   
   Map<String,String> map = new HashMap<>();
    for (int i = 1; i <=30 ; i++) {
          
   
        new Thread(()->{
          
   
            map.put(Thread.currentThread().getName()
                    ,UUID.randomUUID().toString().substring(0,8));
            System.out.println(map);
        },String.valueOf(i)).start();
    }

}

(4)HashMap线程安全改造

Map<String,String> map = new ConcurrentHashMap<>();
经验分享 程序员 微信小程序 职场和发展