增加锁数的最佳方法是什么?
此问题基于在整数上进行同步导致NullPointerException并且源自此问题同步整数值
我想知道增加Java中锁的数量的最佳方法是什么。 除了在ConcurrentHashMap
实现,即基于固定数组并通过计算键的哈希来引用数组的索引?
以下是预期的。 如果一个对象的doMoreThing()
正在进行中,那么如果它从不同的线程调用,我不应该对同一个对象执行doAnotherThing()
。
public void doSomething(int i) { doAnotherThing(i);// some checks here based on it it will call to // doMoreThing doMoreThing(i); }
Java中的每个Object
都有一个关联的锁。 如果需要新锁,可以创建新Object
。 引用的问题并不清楚为什么你试图增加锁的数量,或者你的意思是什么。 也许你可以提供更多细节。
更新以下更改的问题
我想我看到了你的目标:有效的是,你想在int
上使用一个synchronized
块来实现一些事情。 有两种相对简单的方法可以完成您的工作:
a)几个线程能够同时使用不同的 int
调用doSomething
是否真的很重要? 如果没有,你可以将两个调用放在synchronized(this)
b) int
s不是Object
。 如果你改变doSomething
来获取一个Integer
并且还改变调用doSomething
(以及调用它的任何东西,等等)也使用Integer
,你可以在Integer
上进行同步。 这里重要的是确保每个调用者都使用相同的Integer
对象 – 可能有多个具有相同int
值的Integer
,但是在不同的Integer
上进行同步将无法提供您正在寻找的保护。