2013-07-21 93 views
2

我沒有看到使用Collections.synchronizedList/synchronizedMap的任何實際價值,更進一步,我們需要在迭代過程中同步列表/映射,這對性能不利。Collections.synchronizedList/synchronizedMap的真正價值是什麼?

我只能使用ConcurrentMap/CopyOnWriteArrayList類。基本上我問我們在什麼情況下只需要使用Collections.synchronizedList/synchronizedMap而不是利用java.util.concurrent包中的類。

回答

3

我沒有看到使用Collections.synchronizedList/synchronizedMap任何真正的價值,並進一步爲每個文件,我們需要迭代,這不利於操作過程中的同步列表/地圖。

無論如何,對集合進行迭代不是一個好主意。如果你關心性能,你應該構建你的結構,這樣它們就不需要迭代了。

我只能使用ConcurrentMap/CopyOnWriteArrayList類。基本上我問我們在什麼情況下只需要使用Collections.synchronizedList/synchronizedMap而不是利用java.util.concurrent包中的類。

併發集合通常更易於使用。你應該注意到一個小的ConcurrentHashMap會比同步的HashMap大很多倍,所以除非你只有少數HashMap,否則HashMap仍然是最好的選擇。

CopyOnWriteArrayList讀取速度非常快,但對於更新非常昂貴。 (它複製整個陣列添加或刪除,可能不止一次)

+0

嘿迭代集合幾乎發生在大多數情況下。但仍然在什麼情況下,我應該只使用synchronizeList/Map而不是併發集合?當你說是ConcurrentHashMap大於同步HashMap?你什麼意思? – Adelave

+0

更大,我的意思是它使用更多的內存。如果您不得不擔心內存使用情況,則可以使用HashMap代替。如果您有很多寫入,則同步列表更好。 –

+0

@Adelave如果你經常迭代像一個同步映射的集合,那麼你的代碼有問題,或者你並不擔心性能。 –