Java:如何检查是否可以获得锁?
如果我想确保对 Java 中的对象进行独占访问,我可以编写如下内容:
...
Zoo zoo = findZoo();
synchronized(zoo)
{
zoo.feedAllTheAnimals();
...
}
Is there a way to check if an object current is located?如果另一个线程正在访问 zoo
,我不希望我的线程等待。如果 zoo
未锁定,我希望我的线程获取锁并执行 synchronized
块;如果没有,我希望它跳过它。
我该怎么做?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您无法使用 Java 中嵌入的低级本机同步来做到这一点。但您可以使用并发包中提供的高级 API 来完成此操作。
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.
您可以使用Lock.tryLock()。更具体地说,
java .util.concurrent.locks.ReentrantLock
you can use
Lock.tryLock()
. more concretely,java.util.concurrent.locks.ReentrantLock
您也可以手动进行。尽管您已经使用 ReentrantLock 得到了满意的答案;)
当然您可以使用方便的方法进行包装。
You may do it manually too. Although you already have satisfying answer with ReentrantLock ;)
Of course you could wrap with convenient methods.