信号量和同步

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

请注意,调用acquire()时不会保持同步锁定,因为这会阻止项目返回到池中。 信号量封装了限制访问池所需的同步,与维护池本身一致性所需的任何同步分开。

有人可以帮助我理解这个及其影响。

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

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

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