避免死锁
下文是笔者收集的避免死锁的方法,如下所示:
如下所示:
当一个线程获取锁,将线程和锁信息记录到一个Map中,当其它线程请求时,我们可以去map中检测以下是否存在锁信息
如:
线程A请求锁2,但是锁2这个时候被线程B持有,这时线程A就可以检查一下线程B是否已经请求了线程A当前所持有的锁
如果线程B确实有这样的请求,那么就是发生了死锁(线程A拥有锁1,请求锁2;线程B拥有锁2,请求锁1)
加锁顺序
多个线程时间需要使用相同顺序的锁,采用此种方式可避免死锁发生如下所示:
Thread 1: lock A lock B Thread 2: wait for A lock C (when A locked) Thread 3: wait for A wait for B wait for C
加锁时限
另一个避免死锁的方法:“ 就是为锁设置一个超时时间,当一个线程在指定时间内未获取到相应锁时,则会释放所有获取的锁 ”死锁检测
死锁检测是可以更好的预防死锁机制当一个线程获取锁,将线程和锁信息记录到一个Map中,当其它线程请求时,我们可以去map中检测以下是否存在锁信息
如:
线程A请求锁2,但是锁2这个时候被线程B持有,这时线程A就可以检查一下线程B是否已经请求了线程A当前所持有的锁
如果线程B确实有这样的请求,那么就是发生了死锁(线程A拥有锁1,请求锁2;线程B拥有锁2,请求锁1)
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。