Every Object
in Java has an associated lock. If you want a new lock, you can create a new Object
. The referenced question doesn't make it clear why you're trying to increase the number of locks, or what you mean by that. Maybe you can provide more details.
Update following changed question
I think I see what you're aiming at: effectively, you want a synchronized
block on the int
that doSomething
is getting passed. There are two relatively simple ways to do what you're after:
a) Is it really important that several threads be able to call doSomething
simultaneously with different int
s? If not, you could just place both calls within a synchronized(this)
b) int
s are not Object
s. If you change doSomething
to take an Integer
and also change whatever's calling doSomething
(and whatever's calling that, and so forth) to also use Integer
s, you can synchronize on the Integer
. It's important here to make sure that every caller will be using the same Integer
object - it's possible to have multiple Integer
s that have the same int
value, but synchronizing on different Integer
s won't provide the protection you're looking for.