产生死锁需要满足以下 4 个条件:
- 互斥条件:指运算单元(进程、线程或协程)对所分配到的资源具有排它性,也就是说在一段时间内某个锁资源只能被一个运算单元所占用。
- 请求和保持条件:指运算单元已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它运算单元占有,此时请求运算单元阻塞,但又对自己已获得的其它资源保持不放。
- 不可剥夺条件:指运算单元已获得的资源,在未使用完之前,不能被剥夺。
- 环路等待条件:指在发生死锁时,必然存在运算单元和资源的环形链,即运算单元正在等待另一个运算单元占用的资源,而对方又在等待自己占用的资源,从而造成环路等待的情况。
只有以上 4 个条件同时满足,才会造成死锁问题。
排查死锁的方式:
- 使用 jsp 可以查看正在运行的 java 进程,找到发生死锁的进程 id 号
- 根据进程 id 号,适用 jstack 查看进程的堆栈信息,从中可以找到死锁在代码中出现的位置。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容