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

信号量和条件(ReentrantLock)之间的区别

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

信号量和条件(ReentrantLock)之间的区别

从表面上看,这些方法的行为可能看起来很相似- 在某些情况下

acquire()/await()

可能使线程阻塞,
release()/signal()
在某些情况下可能会导致线程阻塞。但是,信号量和条件有不同的用途:

  • java.util.concurrent.Semaphore
    是相对较高级别的同步机制,供一般开发人员使用。您通常会使用它来限制对某些资源的并发访问
    acquire()
    ,方法是在访问资源之前先进行每个请求者线程调用(如果没有信号灯许可,则使线程阻塞)。来自Javadoc的说明:

从概念上讲,信号量维护一组许可证。如有必要,每个Acquisition()会阻塞,直到获得许可为止,然后再获取许可。每个release()添加一个许可,有可能释放阻塞获取者。

  • java.util.concurrent.locks.Condition
    是相对较低级别的同步机制,基本上可以增强提供的
    java.lang.Object
    方法的功能
    wait()
    notify()
    并且
    notifyAll()
    。它使线程在需要等待某种条件变为真时挂起其活动(通常通过其他线程的活动),然后使其他线程能够在状态变量占用时“唤醒”正在等待的线程。条件中的一部分可能已更改。通常很难正确使用,建议一般开发人员使用java.util.concurrent包中的高级机制(例如Semaphore)。

您可以在Brian Goetz的出色著作“ Java Concurrency in Practice”中找到有关此问题的更多详细信息。



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

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

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