有两个容器,一个用于保存线程正在请求的锁,一个用于保存线程已经持有的锁。每次加锁之前都会做如下检测:
1)检测当前正在请求的锁是否已经被其它线程持有,如果有,则把那些线程找出来
2)遍历第一步中返回的线程,检查自己持有的锁是否正被其中任何一个线程请求
如果第二步返回真,表示出现了死锁
三种用于避免死锁的技术:
1、加锁顺序(线程按照一定的顺序加锁)
2、加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)
有两个容器,一个用于保存线程正在请求的锁,一个用于保存线程已经持有的锁。每次加锁之前都会做如下检测:
1)检测当前正在请求的锁是否已经被其它线程持有,如果有,则把那些线程找出来
2)遍历第一步中返回的线程,检查自己持有的锁是否正被其中任何一个线程请求
如果第二步返回真,表示出现了死锁
三种用于避免死锁的技术:
1、加锁顺序(线程按照一定的顺序加锁)
2、加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)