何为死锁?
你持有一个锁,我也持有一个锁;然而你想要我的锁,我又想要你的锁,但我们都不能提供给对方锁,导致死锁了!
出现:一般同步中嵌套同步导致的。
- 面试的时候,请给我写一个死锁程序:
class Test implements Runnable{
private boolean flag;
Test(boolean f){
this.flag = f;
}
public void run(){
if(flag){
synchronized(MyLock.locka){
System.out.println("if locka");
synchronized(MyLock.lockb){
System.out.println("if lockb");
}
}
}
else{
synchronized(MyLock.locka){
System.out.println("else locka");
synchronized(MyLock.lockb){
System.out.println("else lockb");
}
}
}
}
}
class MyLock{ //自己创建两个锁对象。
static Object locka = new Object();
static Object lockb = new Object();
}
class DealLockTest{
public static void main(String[] args){
Thread t1 = new Thread(new Test(true));
Thread t2 = new Thread(new Test(false));
t1.start();
t2.start();
}
}
程序的运行结果
image.png- 我的电脑没有出现死锁,我也很奇怪,原因以后再补上,现在我还无法理解。
网友评论