失效链接处理 |
死锁分析 PDF 下载
本站整理下载:
提取码:7ghq
相关截图:
主要内容:
在任何地方都可以线程切换,甚至在一句语句中间
要尽量设想对自己最不利的情况
死锁产生的四个条件
互斥等待:一段代码或操作同时只能有一个人做,只有抢到锁的一个人可以操作,其它人必须等待第一个人做完
hold and wait: 持有一个锁等待另外一个锁
循环等待:A 持有锁等待B的锁,B持有锁等待A的锁。
无法剥夺的等待:
通过代码实现一个死锁
public class AccountService {
void transfer(Account from,Account to,int amount) {
synchronized(from) {
synchronized(to) {
from.setAmount(from.getAmount()-amount);
to.setAmount(to.getAmount()+amount);
}
}
}
}
死锁防止:
破除互斥等待 ------一般无法破除
破除hold and wait ------------ 一次性获取所有资源
破除循环等待--------------- 按顺序获取资源(判断accountId 先锁id比较小的)
破除无法剥夺的等待----------- 加入超时
|