java - 如何检测死锁?同步块(synchronized block)超时?

标签 java multithreading deadlock

我正在调试一个运行多个线程的 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/

相关文章:

Java:将所有参数打印为单个字符串

java - 如何在 UTC 中倒计时到毫秒

java - 寻找 : A popup implementation in a Java library, 并执行特定操作

java - 如何在线程池中编写run方法

java - JNativeHook 来自同一操作的多个响应(鼠标单击、按键类型和鼠标滚动)

c - `pthread_t*` 的 `pthread_create` 参数需要存活多长时间?

sql - 获取下一个没有 "identity"的 id 号的最佳方法

go - 比赛模拟 fatal error : all goroutines are asleep - deadlock

java - 如何控制一个Spring应用中有多少个线程?

InnoDB 的 MySQL 死锁问题