2012-03-27 111 views
1

我一直有在甲骨文形式的背景和正在走向JAVA領域的程序員走近。他問我一個問題,我沒有很好的答案。而不是回答這個問題;我總是那樣做,或者我就是這樣教的。我想我會做一些研究。的Java數據庫連接

問題:Java的多線程能力;爲什麼不爲每個用戶設置一個到數據庫的JDBC連接,每個用戶都在自己的線程上?而不是設置連接池並應用用戶可以訪問池的安全性?

+0

在這種情況下,「用戶」是什麼意思?一位Oracle用戶?應用程序用戶? – Jon 2012-03-27 15:14:31

+0

@Jon在這種情況下,「用戶」將是應用程序用戶 – Miller 2012-03-27 15:18:56

+2

每個應用程序用戶有一個線程?因此,500個併發用戶將等於JVM中的500個專用線程,每個用戶有一個線程,其中許多將在用戶什麼都沒做的時候閒置......您是否可以明白爲什麼線程池現在更可取?對於任何不平凡的應用程序來說,這種方法不會擴展。 – Jon 2012-03-27 15:31:50

回答

3

連接池擴展性更好。如果每個用戶都有專用連接,則50個用戶需要50個連接。有了游泳池,你可以用10-20個連接來處理50個用戶(取決於用例)。現在看看一個更大的團隊,並考慮處理500,5000或50000個用戶,您將看到每個用戶模型的1個連接不會擴展。

隨着連接池(和一個線程池)中,每個請求將仍然由一個線程和一個數據庫連接處理,但他們會從池中,而不是每個用戶的專用一作出。

1

因爲保持大量線程的開銷是效率不高。當有更多的用戶比你的應用服務器或數據庫可以維護時會發生什麼?當數據庫表上存在很多爭用時會發生什麼?

通過使用連接池,你不必讓您從從池中重新使用數據庫連接一個大的性能提升再次從零開始「連接」到數據庫。

Apache's DBCP事情是,如果你不使用應用程序服務器開始的好地方。