Java 將執行緒不安全的集合轉換為執行緒安全的集合
阿新 • • 發佈:2022-03-01
參考
建議
- 建議使用
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;
}
如果覺得文章對您有幫助,希望您能 關注+推薦 哦