我正在调试一个运行多个线程的 Java 应用程序。查看日志一段时间后,似乎其中一个线程不再运行。我的猜测是线程正在等待一个永远不会释放的锁(最后的输出是在调用同步方法之前)。
我可以为线程配置超时吗?一种“等待这个锁,但如果 10 秒后它不可用,就不要再等了!”
最佳答案
您可以使用 java.util.concurrent.Lock而不是固有的 Object
锁。 RentrantLock没有公平排序具有与内在锁相同的基本行为和语义。有一种方法tryLock
需要一个超时参数:
Lock lock = ...;
if (lock.tryLock(10L, TimeUnit.SECONDS)) {
try {
// manipulate protected state
} finally {
lock.unlock();
}
} else {
// perform alternative actions
}
关于java - 如何检测死锁?同步块(synchronized block)超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1194606/