![](/img/trans.png)
[英]What is difference between HashMap in synchronized block vs Collections.synchronizedMap().
[英]Difference between Collections.synchronizedMap() and synchronized
如果我創建地圖
Map map=new HashMap(40,.75f);
通過以下兩種不同方式進行同步
Collections.synchronizedMap(map) :- which is internally using mutex
synchronized(map){}
兩種方法之間有什么區別。
Collections.synchronizedMap(map) :- which is internally using mutex
synchronized(map){}
兩種方法之間有什么區別。
不同之處在於Collections.synchronizedMap(map)
通過將地圖包裝在一個同步對象中為您進行同步。 如果查看Collections
類的Java源代碼,則應該看到SynchronizedMap
對象。 在那里,它的工作類似於:
final Object mutex; // Object on which to synchronize
...
public int size() {
synchronized (mutex) {return m.size();}
}
因此,在內部它的作用與在外部進行synchronized
調用的作用相同。 但是,它需要您手動進行猜測工作和編程。 它可以使您避免丟失和保護重要的方法調用,也可以避免將Map
傳遞到未正確同步它或其他東西的其他庫。
第三個選項可能更好,那就是使用ConcurrentHashMap
。 這是一個從頭開始編寫的哈希映射,以允許多個線程對其並行操作。 它會提供比您提到的兩個選項更好的性能。
同步對象可確保一次僅一個線程可以使用該對象。
http://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.