为什么第二次打印t2的状态会输出TIMED_WAITING ?不应该还是BLOCKED吗,t1还没释放锁啊?
来源:6-5 阻塞的含义

慕容9054781
2020-01-29
public class BlockedWaitingTimeWaiting implements Runnable {
public static void main(String[] args) throws InterruptedException {
BlockedWaitingTimeWaiting runnable = new BlockedWaitingTimeWaiting();
Thread t1 = new Thread(runnable);
t1.start();
Thread t2 = new Thread(runnable);
t2.start();
Thread.sleep(5);
System.out.println(t1.getState()); //TIMED_WAITING : t1正在 Thread.sleep(1000)
System.out.println(t2.getState()); //t2正在 syn() 阻塞,拿不到t1正持有的锁
Thread.sleep(1300);
System.out.println(t1.getState()); //WAITING
System.out.println(t2.getState()); //这里输出的是TIMED_WAITING???
}
@Override
public void run() {
syn();
}
private synchronized void syn() {
try {
Thread.sleep(1000);
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
写回答
2回答
-
悟空
2020-01-30
是的,其他同学已经回答了
122020-03-30 -
慕粉6188528
2020-01-30
都是执行wait();,后面两个都应该为waiting状态
00
相似问题