带有执行程序或多线程环境的Apache DBCP



我在我的服务中具有以下代码。xml

<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主要是有效的。执行程序的使用告诉我,该应用程序是多线程。您认为这里使用DBCP不合适吗?这是一个好习惯吗?或者,我是否生活在一个古老的神话中,DBCP无法应对多读环境?

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

我已经读到,当您的应用程序是单线程而不是多线程时,DBCP主要是有效的。

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

DBCP无法处理多线程环境?

考虑一下。如果您的应用程序仅是单线程,则它永远不会用户使用超过一个连接。JDBC正在阻止,因此您不能从同一线程(简化)一次使用两个连接。话虽如此,如果您仅从一个线程查询数据库,则不仅不需要连接池,而且不需要DataSource。一个Connection就足够了。

因此...我们主要在多线程应用程序中使用连接池,尤其是在线程数量大于可用的连接数量和线程之间互相竞争的情况下。每个理智连接池都能在多线程环境中工作。

相关内容

  • 没有找到相关文章

最新更新