This question already has an answer here:
If I want to ensure exclusive access to an object in Java, I can write something like this:
...
Zoo zoo = findZoo();
synchronized(zoo)
{
zoo.feedAllTheAnimals();
...
}
Is there a way to check if an object is currently locked? I don't want my thread to wait if another thread is accessing zoo
. If zoo
is not locked, I want my thread to acquire the lock and execute the synchronized
block; if not, I want it to skip it.
How can I do this?
you can use
Lock.tryLock()
. more concretely,java.util.concurrent.locks.ReentrantLock
You can't do it using the low-level native synchronization embedded in Java. But you can do it using the high-level APIs provided in the concurrent package.
You may do it manually too. Although you already have satisfying answer with ReentrantLock ;)
Of course you could wrap with convenient methods.