2010-10-15 257 views
11

我无法从javadocs中的信号量描述中理解以下内容。信号量和同步

注意,没有同步锁是 举行时获取()被调用为 会阻止 返回到池中的项目。 信号量 封装了从保持 池本身的一致性所需的任何同步 分别限制访问池, 所需的同步 。

有人可以帮助我了解这一点及其影响。

回答

11

信号量充当可用资源池深度的限制器;例如,一个容量为10的信号量允许最多10个线程立即获取它,并且试图获取它的任何其他线程都会阻塞,直到其他线程释放它为止。

这与普通的互斥或监视器锁定有些不同,它通常用于防止多个线程同时修改相同的变量并导致不一致的结果或程序状态。

例如,考虑一个连接池,其连接限制为10个。每个需要连接的线程都会在连接使用期间获取信号(这可以防止太多的线程同时请求连接),但是当从内部连接时,池对象也必须使用synchronized块或方法收集或放回,以防止丢失跟踪连接或错误地将同一连接交给两个不同的线程,因为他们同时询问。

+3

确实是一个很好的解释。 +1 – 2010-10-15 03:53:06