我有个问题。在下面的代码中,如果一个线程在等待语句中被阻塞,而另一个线程尝试执行 foo(),会打印 hello world 消息吗?为什么?
synchronized foo(){
system.out.println("hello world");
.....
wait();
.....
}
我有个问题。在下面的代码中,如果一个线程在等待语句中被阻塞,而另一个线程尝试执行 foo(),会打印 hello world 消息吗?为什么?
synchronized foo(){
system.out.println("hello world");
.....
wait();
.....
}
为了让线程进入该方法foo
,它需要锁定包含 foo 方法的对象(监视器)。执行时wait
,线程释放监视器上的锁。因此,如果另一个线程尝试执行 foo 并且(假设它可以获得锁),那么它将打印“hello world”消息。
将 wait() 调用包装在一段时间内也是一种最佳实践。原因:零星醒来!
是的。
等待(); 放弃监视器,所以是的,如果线程 A 在 wait() 中被阻塞;, 线程 B 将能够进入 foo 并打印 hello world