首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程同步

线程同步
EN

Stack Overflow用户
提问于 2015-10-21 15:33:27
回答 2查看 210关注 0票数 1

下面的代码创建一个新的Thread,并等待线程结束,直到主线程再次激活。

  1. 我不太明白它是怎么工作的。为什么不立即给mythread.wait();打电话?
  2. 为什么不使用Thread.join()呢? 公共静态空洞主(String[] args) { 线程my线程=新MyThread("hello");mythread.start();同步(my线程){ try { mythread.wait();} catch (InterruptedException e) {}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-21 16:05:50

当线程完成运行时,它会调用自己的notifyAll()。这是 is implemented:它在线程上等待。因此,由于您的主线程在线程上等待,一旦它完成运行,主线程就会被通知,并且可以继续执行。

您违反了一条记录在案的规则:永远不要等待线程对象。您还违反了另一个问题:应该始终在循环中调用wait(),检查条件。

票数 2
EN

Stack Overflow用户

发布于 2015-10-21 16:06:52

它的工作方式是,当myThread终止时,它调用notifyAll()来唤醒您的myThead.wait()。检查Thread.join()方法的java文档,其中它引用了它的实现。

请参阅Java synchronization is doing auto notify on exit ? Is this expected?

为什么不改用联接呢?我觉得你应该这样做。少写你要写的代码。它实际上并不比您在这里实现的更多,其他阅读您的代码的人可能更熟悉使用该调用来等待线程退出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33263428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档