分析死锁步骤:
1.通过jps命令找出java线程id
1.通过jps命令找出java线程id
2.通过jstack -l pid > test.txt,将堆栈信息打印到文件
3.查看堆栈信息中状态为Blocked阻塞状态的线程,分析其正在请求哪个锁并锁住了哪个对象,然后看这个锁被哪个线程持有并查看该线程在请求哪个锁,如此循环就会发现形成一个环,可以分析出是哪个锁使用出了问题
避免死锁的处理方式:
1.线程按一定顺序加锁
2.线程在获取锁时可以加上时间限制,如果超时则放弃锁请求
3.在实际使用中对sleep()方法的使用要斟酌,看可否使用yield()方法
4.使用Lock方式加锁一定要在finally块中释放锁