【发布时间】:2011-04-25 17:49:42
【问题描述】:
我无法从 javadocs 中的信号量描述中完全理解以下内容。
注意没有同步锁 当acquire()被调用时持有 会阻止一个项目 回到了游泳池。 信号量 封装同步 需要限制对游泳池的访问, 与任何同步分开 需要保持一致性 游泳池本身。
谁能帮我理解这个及其含义。
【问题讨论】:
标签: java multithreading semaphore
我无法从 javadocs 中的信号量描述中完全理解以下内容。
注意没有同步锁 当acquire()被调用时持有 会阻止一个项目 回到了游泳池。 信号量 封装同步 需要限制对游泳池的访问, 与任何同步分开 需要保持一致性 游泳池本身。
谁能帮我理解这个及其含义。
【问题讨论】:
标签: java multithreading semaphore
信号量充当可用资源池深度的限制器;例如,容量为 10 的信号量允许最多 10 个线程一次获取它,任何其他尝试获取它的线程都会阻塞,直到其他线程之一释放它。
这与普通的互斥或监视器锁定有些不同,后者通常用于防止多个线程同时修改相同的变量并导致结果或程序状态不一致。
例如,考虑一个限制为 10 个连接的连接池。每个需要连接的线程都将在其使用连接期间获取信号量(这可以防止太多线程同时请求连接),但是池对象在从其内部取出连接时也必须使用同步块或方法收集或放回它们,以防止丢失连接跟踪或错误地将同一连接交给两个不同的线程,因为它们同时请求。
【讨论】: