我正在运行一台web服务器。每个用户请求都将更新/查找数据库。并发数据库连接的最大数目应小于N。N+1此并发请求应退出并执行其他逻辑,而不是连接到数据库。我能想到的就是使用原子整数,它会在连接到db时被每个请求递增/递减。
我的问题是,除了原子整数之外,在java中有没有其他可用的同步辅助工具呢?我不认为我可以使用CountDownLatch或循环屏障来做这件事。
发布于 2011-03-07 18:16:15
对于这种情况,Semaphore是最合适的同步原语:
private Semaphore s = new Semaphore(N);
public void doRequest() {
if (s.tryAquire()) {
try {
...
} finally {
s.release();
}
} else {
// other logic
}
}发布于 2011-03-07 18:15:53
您可以尝试连接的ArrayBlockingQueue。使用N初始化队列。
如果q.poll()返回null,则先执行q.poll()
<
但我会强烈要求使用现有的解决方案,如proxool。
发布于 2011-03-07 18:26:10
或者,您可以使用一个连接池,比如Apache Commons DBCP,它将为您处理连接,并且可以在没有连接时等待连接,或者抛出您可以处理的异常。
https://stackoverflow.com/questions/5218321
复制相似问题