1. 程式人生 > 其它 >Java 將執行緒不安全的集合轉換為執行緒安全的集合

Java 將執行緒不安全的集合轉換為執行緒安全的集合

參考

建議

  • 建議使用 java.util.concurrent 工具包下面的對應類,效能更好。如 HashMap 可以使用 ConcurrentHashMap

程式碼

package thread;

import java.util.*;

/**
 * @Author 夏秋初
 * @Date 2022/3/1 15:36
 */
public class Test {
    public static void main(String[] args) {
        Map<String, Object> map = Collections.synchronizedMap(new HashMap(16));
        Set<String> set = Collections.synchronizedSet(new HashSet(16));
        List<String> list = Collections.synchronizedList(new ArrayList<>(10));
    }
}

原因(HashMap為例)

  • 通過 Collections.synchronizedMap(new HashMap(16)) 執行後,返回一個 SynchronizedMap 物件,實現了 Map 介面,原始碼 Collections 2564 行為該物件的原始碼

  • get 與 put 方法都使用了 synchronized 程式碼塊實現同步

        public V get(Object key) {
            synchronized (mutex) {return m.get(key);}
        }

        public V put(K key, V value) {
            synchronized (mutex) {return m.put(key, value);}
        }
  • 其中 final 常量 mutex 是該物件本身,可以檢視 Collections 2571 行的建構函式
        SynchronizedMap(Map<K,V> m) {
            this.m = Objects.requireNonNull(m);
            mutex = this;
        }
如果覺得文章對您有幫助,希望您能 關注+推薦 哦