2010-01-23 45 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是合适的?