gpt4 book ai didi

java - 具有执行程序或多线程环境的 Apache DBCP

转载 作者:行者123 更新时间:2023-11-29 08:03:17 26 4
gpt4 key购买 nike

我的 services.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 无法处理多线程环境?

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

最佳答案

I've read that DBCP is effective mostly when your app is single-threaded, NOT multi-threaded.

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

DBCP can't handle multi-threaded environment?

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

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

关于java - 具有执行程序或多线程环境的 Apache DBCP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13076124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com