我正在研究 Java 中的信号量并正在阅读这篇文章http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Semaphore.html http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Semaphore.html。我唯一不明白的是为什么 acquire() 方法不在同步上下文中使用。查看上面网站上的示例:
他们创建一个信号量:
private Semaphore semaphore = new Semaphore(100);
并像这样获得许可:
semaphore.acquire();
现在,两个或多个线程是否有可能同时尝试 acquire() ?如果是这样的话,计数就会有一点问题。
或者,信号量本身处理同步吗?
或者,信号量本身处理同步吗?
是的,基本上就是这样。信号量是线程安全的,如中所述javadoc http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html:
内存一致性影响:调用“释放”方法(例如release())之前线程中的操作发生在另一个线程中成功的“获取”方法(例如acquire())之后的操作。
大多数对对象的操作java.util.concurrent
包是线程安全的。更多详细信息在最底部提供包 javadoc http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)