死锁问题出现及解决

参考:https://segmentfault.com/a/1190000039753805

1.死锁是怎么形成的

满足了以下四点之后就形成了死锁:

互斥条件:多个线程不能同时使用同一个资源。

持有并等待:1线程拿着资源A,等资源B;2线程拿着资源B

不可剥夺:只有等2线程用完资源B才能释放资源

环路:1线程拿着资源A,等资源B;2线程拿着资源B,等资源A

2.如何预防

利用工具排查死锁问题:在 Linux 下,我们可以使用 pstack + gdb 工具来定位死锁问题。

1)避免死锁问题就只需要破环其中一个条件就可以,最常见的并且可行的就是使用资源有序分配法,来破环环路等待条件。

如:每个线程都先拿资源A,再拿资源B

2)不能的功能使用不同的锁,并避免锁的嵌套

3.出现了如何解决

1)重启;2)设置超时时间;3)使用并发类ConcurrentHashMap、ConcurrentLinkedQueue

你可能感兴趣的:(java,开发语言)