【发布时间】:2018-05-11 07:07:44
【问题描述】:
我正在阅读有关 Java 中的等待和通知。
我会用一个小例子来解释:
@Override
public void run() {
synchronized (msg) {
try{
msg.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(name+" processed: "+msg.getMsg());
}
}
这里说当我们做synchronized (msg)时。当前线程 T1 将锁定 msg 对象。
所以锁可以通过两种方式释放:
- 同步块完成后
- 当 wait() 被 T1 调用时??
如果另一个线程调用 notify() 并唤醒线程 T1,T1 将再次获得锁定msg 对象的访问权限?
【问题讨论】:
-
T1 没有必要在收到通知后立即开始执行,它与等待访问对象锁的其他线程竞争。
标签: java multithreading thread-safety