银翼的魔术师s
2018-09-19 08:59
采纳率: 69.1%
浏览 655
已采纳

新手 Java 多线程 .wait(); 函数前面的对象 要填什么

.wait() 的作用是 让当前线程进入等待状态,同时释放当前线程所持有的锁。
那 .wait前面的对象要填什么

图片说明

.wait() 的作用是 让当前线程进入等待状态,同时释放当前线程所持有的锁。
那 .wait前面的对象要填什么

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 艾德 2018-09-19 12:39
    已采纳

    一般来说,synchronized谁就wait()谁。synchronized拿到对象锁,执行过程中发现条件不成熟,于是wait()把拿到的对象锁放下,继续等待。给其他线程机会。

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • threenewbee 2018-09-19 11:32

    wait前面应该是线程。但是你是字符串变量,感觉你需要的不是wait,而是lock (用了synchronized,不需要再lock,其它线程访问prev等变量,如果有线程锁定,会自动等待)

    https://blog.csdn.net/superjunenaruto/article/details/58315357

    评论
    解决 无用
    打赏 举报
  • 艾德 2018-09-19 12:48

    你这个例子我感觉会出现线程B和C死等的情况

    评论
    解决 无用
    打赏 举报
  • 范一凡 2018-09-19 14:44

    wait可以用Object对象
    Object对象用于通知处在等待该对象的线程的方法
    so,你可以这样理解,设定Object a,b,c用来同步代码块

    上面不好理解,下面用本例说明
    每一个MyThThread线程中定义两个Object对象,前一个作用为锁定自己的代码块,后一个用于解锁别的线程的代码块。
    main中
    A线程开启,c锁自己,开a
    B线程开启,a锁自己,被A线程开启,开b
    C线程开启,b锁自己,被B线程开启,开c
    A线程开启,循环

    可以做到十次ABC循环
    但是有个问题
    最后一次的C线程wait之后没人开,会一直等待
    建议设一个条件判断是最后一次时不走等待;

    评论
    解决 无用
    打赏 举报