为了账号安全,请及时绑定邮箱和手机立即绑定

多线程如何确保在另一个线程的obj.notify()执行之前,当前线程已经执行了obj.wait()?

多线程如何确保在另一个线程的obj.notify()执行之前,当前线程已经执行了obj.wait()?

繁星coding 2019-01-18 21:23:03
如果线程的wait比notify先执行,那么程序就死了,怎么才能解决这个问题? public class AaaTest { public static void main(String[] args) throws InterruptedException { Object obj=new Object(); Ttt ttt=new Ttt(obj); ttt.start(); synchronized(obj){ obj.wait(); } System.out.println("wait先执行,程序通过"); } static class Ttt extends Thread{ Object obj; Ttt(Object obj){ this.obj=obj; } public void run() { synchronized(obj){ obj.notify(); } } } } 这样是否能够100%保证 obj.wait(); 在 obj.notify(); 之前执行?
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

当然不能!
因为哪个线程先进入同步块是不确定的。

main方法可以这样改:

synchronized(obj) {
    ttt.start();
    obj.wait();
}

这样可以保证ttt线程即使先于obj.wait()方法执行,也无法进入同步块。

查看完整回答
反对 回复 2019-03-01
?
慕容708150

TA贡献1831条经验 获得超4个赞

不能,主线程还是ttt线程,那个先进入同步块synchronized(obj){}无法保证,楼上正解

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 616 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信