2013-10-16 72 views
0

我們可以通過使用'collections.synchronizedCollection(Collection c)' 或'collections.synchronizedMap(Map c)'來同步集合,我們也可以使用Java併發API,如ConcurrentHashMap或ArrayQueue或BlockingQueue 。包裝和併發集合之間的區別

這兩種獲取同步集合的方式在同步化水平上有差異還是幾乎相同?

可以任何一個解釋?

+5

訪問一個集合的2種以上的元素就在這裏。源代碼是最好的文檔。 –

+2

是的,他們是非常不同的。我建議先閱讀javadocs,然後閱讀一些併發教程。 – jtahlborn

回答

1

是:大規模並行處理時的速度。

這可以用一種非常簡單的方式來說明:想象一下,100個線程正在等待從集合中取出某些東西。

  • 同步方式:99將put置於睡眠狀態並且1線程獲取其值。

  • 併發方式:100線程立即獲取它們的值,沒有任何線程被擱置。

現在第二個方法花費的時間比簡單的爭取多一點的時間,但只要像2個線程的最小使用它一個恆定的基礎上,這是非常值得大家拜保存到併發時間執行。

+0

請注意,儘管您可能以「並行方式」讀取100個線程,但寫入時不適用。 ConcurrentHashMap將內部數組分割成一定數量的部分(默認爲16),每個部分都有自己的鎖。因此,100個線程將在任何給定時間使用最多16個線程寫入其各個部分。 – sudocoder

0

所以現在按我的理解同步的方式是一個包裝,並阻止整個集合對象,並在另一方面併發方式只對象中收集得到同步的,我們可以在同一時間