1

我有我的services.xml的Apache DBCP與遺囑執行人或線程環境

<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無法處理多人環境?

任何指導正確的方向將不勝感激。

回答

4

我讀過DBCP在大多數情況下是有效的,當你的應用程序是單線程的,而不是多線程的。

你能提供這些信息的來源嗎? DBCP的唯一問題是它使用單鎖來同步池上的所有操作,這可能會成爲沉重的多線程應用程序中的瓶頸。

DBCP無法處理多線程環境?

想一想。如果您的應用程序只是單線程的,它將永遠不會使用多個連接。 JDBC被阻塞,所以你不能一次從同一個線程使用兩個連接(簡化)。話雖如此,如果你只從一個線程查詢數據庫,不但你不需要連接池,你不需要DataSource。一個Connection就足夠了。

因此......我們主要在多線程應用程序中使用連接池,尤其是在線程數量遠大於可用連接數量和線程互相競爭的情況下。每個理智的連接池都能夠在多線程環境中工作。

+0

你好,我實際上是在探索這個自己。我找不到任何使用Java多線程連接池的優秀教程。我正在計劃爲每個線程.java應用程序創建一個連接,而我只是無法開始。 – Wax