增加锁数的最佳方法是什么?

此问题基于在整数上进行同步导致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上进行同步将无法提供您正在寻找的保护。