Java:如何检查是否可以获取锁?

Ton*_*ony 10 java multithreading locking synchronized

如果我想确保用Java独占访问对象,我可以这样编写:

...
Zoo zoo = findZoo();
synchronized(zoo)
{
    zoo.feedAllTheAnimals();
    ...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法检查对象当前是否被锁定?如果另一个线程正在访问,我不希望我的线程等待zoo.如果zoo没有锁定,我希望我的线程获取锁并执行synchronized块; 如果没有,我希望它跳过它.

我怎样才能做到这一点?

Sur*_*ran 7

您无法使用Java中嵌入的低级本机同步来完成此操作.但您可以使用并发程序包中提供的高级API来完成此操作.

Lock lock = new ReentrantLock();
....
//some days later
....
boolean isLocked = lock.tryLock();
Run Code Online (Sandbox Code Playgroud)


irr*_*ble 5

你可以使用Lock.tryLock().更具体地说,java.util.concurrent.locks.ReentrantLock