如何解决Java:如何检查是否可以获取锁? [重复]
| 这个问题已经在这里有了答案:解决方法
您无法使用Java中嵌入的低级本机同步来完成此操作。但是您可以使用并发包中提供的高级API来实现。
Lock lock = new ReentrantLock();
....
//some days later
....
boolean isLocked = lock.tryLock();
,您可以使用Lock.tryLock()
。更具体地说,java.util.concurrent.locks.ReentrantLock
,您也可以手动执行。尽管您已经通过ReentrantLock获得了令人满意的答案;)
private boolean flag;
private final Object flagLock = new Object();
private final Object actualLock = new Object();
//...
boolean canAquireActualLock = false;
synchronized (flagLock) {
if (!flag) {
flag = canAquireActualLock = true;
}
}
if (canAquireActualLock) {
try {
synchronized (actualLock) {
// the code in actual lock...
}
} finally {
synchronized (flagLock) { flag = false; }
}
}
当然,您可以使用方便的方法进行包装。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。