版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoye319/article/details/87376963
大家工作中或者面试的时候,会碰到死锁的问题,大家都听说过两个线程互相等待,从而导致等死(锁)的情况吧,就是线程1持有对象1的锁,线程2持有对象2的锁,然后两者都等待对方释放其持有对象的锁,然后一直等,等到死亡。但是听是都听过,若有人让你写个例子呢???
下面就举个例子:
public class DieLock {
public static Object t1 = new Object();
public static Object t2 = new Object();
public static void main(String[] args){
new Thread(){
@Override
public void run(){
synchronized (t1){
System.out.println("Thread1 get t1");
try {
Thread.sleep(100);
}catch (Exception e){
}
synchronized (t2){
System.out.println("Thread2 get t2");
}
}
}
}.start();
new Thread(){
@Override
public void run(){
synchronized (t2){
System.out.println("Thread2 get t2");
try {
Thread.sleep(100);
}catch (Exception e){
}
synchronized (t1){
System.out.println("Thread2 get t1");
}
}
}
}.start();
}
}
运行的结果如下:
两者一直等待对方释放持有的锁,然后一直等到死亡。。。
中间加睡眠时间,是为了防止线程一运行就获得两个对象的锁。