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

如何在不是线程的对象上调用wait()和notify()方法?

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

如何在不是线程的对象上调用wait()和notify()方法?

锁定是关于保护共享数据。

锁位于要保护的数据结构上。线程是访问数据结构的事物。锁位于数据结构对象上,以防止线程以不安全的方式访问数据结构。

任何对象都可以用作内部锁(与结合使用

synchronized
)。这样,您可以通过将synced修饰符添加到访问共享数据的方法中来保护对任何对象的访问。

wait
notify
方法被称为上正在使用的锁对象。锁是共享的通信点:

  • 当有锁的线程调用

    notifyAll
    它时,等待同一锁的其他线程将收到通知。当具有锁的线程调用
    notify
    它时,等待同一锁的线程之一将收到通知。

  • 当有锁

    wait
    的线程调用它时,该线程释放锁并进入休眠状态,直到a)收到通知,或b)任意唤醒(“虚假唤醒”);或者 由于这两个原因之一,等待线程仍停留在调用中,直到它唤醒为止,然后线程必须重新获取锁,然后才能退出wait方法。

请参阅有关受保护块的Oracle教程,Drop类是共享的数据结构,使用Producer和Consumer可运行对象的线程正在访问它。锁定Drop对象将控制线程如何访问Drop对象的数据。

线程在JVM实现中用作锁,建议应用程序开发人员避免将线程用作锁。例如,Thread.join的文档说:

此实现使用以this.isAlive为条件的this.wait调用循环。当线程终止时,将调用this.notifyAll方法。建议应用程序不要在线程实例上使用wait,notify或notifyAll。

Java
5引入了显式锁实现

java.util.concurrent.locks.Lock
。它们比隐式锁更灵活。有一些类似于等待和通知的方法(等待和信号),但是它们是在Condition而不是在锁上的。具有多个条件使仅针对那些正在等待特定类型通知的线程成为可能。



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

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

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