簡體   English   中英

Collections.synchronizedMap()和synced之間的區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM