首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的同步辅助工具

java中的同步辅助工具
EN

Stack Overflow用户
提问于 2011-03-07 18:09:50
回答 4查看 155关注 0票数 1

我正在运行一台web服务器。每个用户请求都将更新/查找数据库。并发数据库连接的最大数目应小于N。N+1此并发请求应退出并执行其他逻辑,而不是连接到数据库。我能想到的就是使用原子整数,它会在连接到db时被每个请求递增/递减。

我的问题是,除了原子整数之外,在java中有没有其他可用的同步辅助工具呢?我不认为我可以使用CountDownLatch或循环屏障来做这件事。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-07 18:16:15

对于这种情况,Semaphore是最合适的同步原语:

代码语言:javascript
复制
private Semaphore s = new Semaphore(N);

public void doRequest() {
    if (s.tryAquire()) {
        try {
            ...
        } finally {
            s.release();
        }
    } else {
        // other logic
    }
}
票数 3
EN

Stack Overflow用户

发布于 2011-03-07 18:15:53

您可以尝试连接的ArrayBlockingQueue。使用N初始化队列。

如果q.poll()返回null,则先执行q.poll()

  • ,然后在使用后执行"perform other

  • 将连接放回池。

<

  • >G212

但我会强烈要求使用现有的解决方案,如proxool

票数 3
EN

Stack Overflow用户

发布于 2011-03-07 18:26:10

或者,您可以使用一个连接池,比如Apache Commons DBCP,它将为您处理连接,并且可以在没有连接时等待连接,或者抛出您可以处理的异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5218321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档