2010-01-23 72 views
0

我有動態哈希表陣列陣列內部元素的Java鎖定

我可以分別使用它們的每一個的synchronized嗎? 像同步的(陣列[1]){代碼..},同步(陣列[2]){代碼..}

由於

+0

你想達到什麼目的?沒有一點環境,這個問題就沒有意義了。 – akappa 2010-01-23 20:18:23

回答

2

當然了,但是最好使用一concurrent map OS一個concurrent skip list吞吐量擔心,如果可以的話。

順便說一句,如果您向我們提供一些背景,我們可以建議你(也許)更好的數據組織和結構。

+0

是的,我認爲絕對沒有理由使用有史以來最好的。 – 2010-01-23 21:05:46

3

您可以在對象上的數組書面特定位置肯定同步:

synchronized (arr[x]) { 
    ... 
} 

然而,只是要小心,以確保您瞭解這是否是做你想要做的事。

這將鎖定由arr [x]引用的特定對象。然而,也不會買你的任何線程安全的訪問方面的陣列itself--換句話說,例如:

  • ,而你的目標時ARR [X],另一鎖定線程仍然可能會更改arr [x]中的哪個對象;
  • 如果兩個線程同時訪問ARR的相同位置(或者讀取該散列映射/對象是存在的,或者設置一個新的),就會有一個爭用條件。

我也傾向於akappa同意 - 你在做什麼聲音有點不同尋常,它可能會更好,因爲「什麼樣的數據結構,我需要爲了做X」重組你的問題,而不是假設從一開始就有一系列hashmaps是合適的?