首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有executor或多线程环境的Apache DBCP

具有executor或多线程环境的Apache DBCP
EN

Stack Overflow用户
提问于 2012-10-26 03:50:35
回答 1查看 919关注 0票数 1

我的services.xml中有以下代码

代码语言:javascript
复制
<bean id="executorService" class="java.util.concurrent.Executors" factory-method="newFixedThreadPool">
    <constructor-arg value="10" />
</bean>
<task:annotation-driven executor="executor" />

<task:executor id="executor" pool-size="10" queue-capacity="100" rejection-policy="CALLER_RUNS" />

在同一个项目中,我还连接到使用dbcp.BasicDataSource的数据库。

我读到过当你的应用程序是单线程的,而不是多线程的时候,DBCP是最有效的。executor的使用告诉我这个应用是多线程的。您认为在这里使用DBCP是不是不合适?这是一个很好的实践吗?或者,我是否生活在一个古老的神话中,即DBCP不能处理多线程环境?

任何正确方向的指导都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-26 04:00:32

我读到过,当你的应用程序是单线程的,而不是多线程的时候,DBCP是最有效的。

你能提供这些信息的来源吗?DBCP的唯一问题是它使用单个锁来同步池上的所有操作,这可能会成为繁重的多线程应用程序的瓶颈。

DBCP不能处理多线程环境吗?

想想看。如果您的应用程序只是单线程的,它永远不会使用多个连接。JDBC是阻塞的,因此您不能同时使用来自同一线程的两个连接(简化)。也就是说,如果只从一个线程查询数据库,那么不仅不需要连接池,也不需要DataSource。一个Connection就足够了。

所以..。我们主要在多线程应用程序中使用连接池,特别是在线程数量远远大于可用连接数量且线程之间相互竞争的情况下。每个健全的连接池都能够在多线程环境中工作。

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

https://stackoverflow.com/questions/13076124

复制
相关文章

相似问题

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