public class Test01 {
public static void main(String[] args) {
Thread a=new MyThread("a");
Thread b=new MyThread("b");
a.start();
b.start();
}
}
class MyThread extends Thread{
public MyThread(String name) {
super(name);//设置线程名
}
@Override
public void run() {
if ("a".equals(Thread.currentThread().getName())){
synchronized ("锁1"){
System.out.println("a线程拿到了锁1,准备获取锁2");
synchronized ("锁2"){
System.out.println("a线程又拿到了锁2,执行结束");
}
}
}else if ("b".equals(Thread.currentThread().getName())){
synchronized ("锁2"){
System.out.println("a线程拿到了锁1,准备获取锁2");
synchronized ("锁1"){
System.out.println("a线程又拿到了锁2,执行结束");
}
}
}
}
}
运行结果:
解决死锁问题最简单的方法,程序中获取锁时使用相同的顺序,避免死锁发生。