稍微修改了下输出语句,为了看的直观一点
输出结果:
Thread[t1,5,main]---------|11locka
Thread[t1,5,main]---------|11lockb
Thread[t1,5,main]---------|22lockb
Thread[t2,5,main]---------|11locka
当t1线程执行完while中的
synchronized (locka) {
System.out.println(Thread.currentThread()+"---------|"+"11locka");
synchronized (lockb) {
System.out.println(Thread.currentThread()+"---------|"+"11lockb");
}
}
执行完毕后 释放了 locka 和lockb
进入了 synchronized (lockb) {
System.out.println(Thread.currentThread()+"---------|"+"22lockb");
//执行到这里时 t2线程进入while 执行的第一部分 t1持有lockb 请求locka t2持有locka 请求lockb 所以发生死锁
synchronized (locka) {
System.out.println(Thread.currentThread()+"---------|"+"22locka");
}
}
|