// 先申请lock2资源,再申请lock1资源
public static void getlock2First(){
synchronized (lock2){
System.out.println(“getlock2”);
getLock1();
}
}
public static void getLock1(){
synchronized (lock1){
System.out.println(“lock2->lock1”);
}
}
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
// 太难把控线程运行的时机了 也有可能此线程执行完了lock1->lock2的顺序
// 直接死循环一直运行
// 总会刚好遇到线程1刚好获得lock1,线程2刚好获得lock2
while (true){
getLock1First();
}
}
}.start();
new Thread(){
@Override
public void run() {
while (true){
getlock2First();
}
}
}.start();
}
}
复制代码