栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

wait / notify和wait / interrupt有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

wait / notify和wait / interrupt有什么区别?

当线程在某个监视器上调用notify时,它将唤醒在该监视器上等待的单个线程,但是 哪个
线程被唤醒由调度程序决定。(或者,一个线程可以调用notifyAll,唤醒所有等待该监视器的线程,然后它们都争夺该监视器,然后失败者回到等待状态。)这就是为什么调用的目标不同,所以发出通知的原因监视器,它告诉调度程序选择一个线程来唤醒。

与通知不同,中断针对特定线程。并且中断不需要被中断的线程在监视器上等待。要使线程在监视器上调用wait,它必须先获取该监视器,然后再等待以释放该监视器,直到线程完成等待或中断为止。

Oracle的建议是仅将中断用于取消。同样,java.util.concurrent中的类也设计为使用中断进行取消。

在您的示例中,中断将不会非常有效,因为控制不会离开while循环,线程仍然必须检查其等待的条件,并且在while循环条件中没有检查是否设置了中断标志。被中断的线程很可能会回到等待状态。

为了使此代码在被中断后立即退出,而不是返回等待状态,请在循环条件中添加对中断标志状态的检查,并让catch块设置中断标志(在引发异常时将其重置):

synchronized (Foo.class) {    while (someCondition && !Thread.currentThread().isInterrupted()) {        try { Foo.class.wait();        } catch (InterruptedException e) { Thread.currentThread().interrupt();         }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414168.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号