定位死锁的工具

如何定位死锁呢?

可以用 jps 和 jstack 打印内存的信息

学习视频

怎么防止死锁【java编程】

作者:peonyX 链接:https://www.nowcoder.com/discuss/723383?source_id=profile_create_nctrack&channel=-1 来源:牛客网

  1. 加锁顺序一致,统一各个线程获取锁的顺序,并强制线程按照指定的顺序获取锁;

  2. 请求锁超时则返回,尝试获取锁时加一个超时时间,没获取到则不断回退,释放所有已经得到的锁;

  3. 等待中断,死锁后发送中断信号,利用ReentrantLock的lock.lockInterruptibly()方法接受中断,并释放锁。

ReentrantLock.lockInterruptibly允许在等待时由其它线程调用等待线程的Thread.interrupt方法来中断等待线程的等待而直接返回,这时不用获取锁,而会抛出一个InterruptedException。 ReentrantLock.lock方法不允许Thread.interrupt中断,即使检测到Thread.isInterrupted,一样会继续尝试获取锁,失败则继续休眠。只是在最后获取锁成功后再把当前线程置为interrupted状态,然后再中断线程。

[[post/03.基础学科/01.操作系统/3.死锁和饥饿| 死锁原理]]

[[post/11.个人总结/java/java并发编程/java 多线程避免死锁操作|避免死锁]]