产生死锁的条件
- 互斥,共享资源A和共享资源B只能被一个线程占用
- 占有且等待,线程1已经取得共享资源A,在等待共享资源B的时候不释放共享资源A
- 不可抢占,其他线程不能强行抢占线程1占有的资源
- 循环等待,线程1等待线程2占有的资源,线程2等待线程1占有的资源,就是循环等待
如何解决死锁
- 重启应用
- 提前规避(破坏死锁条件的一个,互斥是锁的本身一个条件,无法破坏)
死锁举例
/**
* 创建一个账号类
*/
public class Account {
private String accountName;
private int price;
public Account(String accountName, int price) {
this.accountName = accountName;
this.price = price;
}
public String getAccountName() {
return accountName;
}
public void setAccountName(String accountName) {
this.accountName = accountName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
/*
转账账号减钱
*