[英]Synchronization aid in java
我正在运行Web服务器。 每个用户请求都将更新/查找数据库。 并发数据库连接的最大数目应小于N。第N + 1个并发请求应退出并执行其他逻辑,而不是连接到数据库。 我能想到的是使用原子整数,该整数将在连接到db时按每个请求递增/递减。
我的问题是,除了Atomic Integer之外,Java中是否还有其他同步辅助工具可用? 我不认为我可以为此使用CountDownLatch或循环障碍。
Semaphore
是这种情况下最合适的同步原语:
private Semaphore s = new Semaphore(N);
public void doRequest() {
if (s.tryAquire()) {
try {
...
} finally {
s.release();
}
} else {
// other logic
}
}
您可以尝试连接的ArrayBlockingQueue 。 用N初始化队列。
但是我会敦促为此使用现有的解决方案,例如proxool 。
或者,您可以使用诸如Apache Commons DBCP之类的连接池,它将为您处理连接,并且可以在没有连接池时等待连接,或者抛出并可以处理异常。
添加到suraj的答案中,我认为您的问题更多是producer consumer
,我更喜欢LinkedBlockingQueue
以提高吞吐量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.