发生死锁的4个必要条件
- 互斥条件 : 一个资源同一时间只能被一个线程获得使用资格
- 请求和保持条件 : 对已获得的资源在为使用完之前不可释放
- 不可剥夺条件 : 不能通过外部因素强制释放已获得的资源
- 环路等待条件 : 若干进程之间形成一种头尾相接的循环等待资源关
死锁举例
public class test {
private Object lock1 = new Object();
private Object lock2 = new Object();
public void func1(){
synchronized(lock1){
// dosomething
synchronized(lock2){
// dosomething
}
}
}
public void func2(){
synchronized(lock2){
// dosomething
synchronized(lock1){
// dosomething
}
}
}
}