我已经接触过具有Oracle表单背景并正在进入Java领域的程序员。他问我一个问题,我没有得到很好的答案。而不是回答;我总是这样做,或者就是我的教学方式。我想我会做一些研究。
问题:使用Java多线程功能;为什么不为每个用户设置数据库的JDBC连接,每个用户都有自己的线程?而不是设置连接池并应用用户可以访问池的安全性?
答案 0 :(得分:3)
连接池可以更好地扩展。如果每个用户有专用连接,则50个用户需要50个连接。使用池,您可以使用10到20个连接来处理50个用户(具体取决于用例)。现在看一个更大的组并考虑处理500,5000或50000个用户,你会发现每个用户模型的1个连接不能扩展。
使用连接池(和线程池),每个请求仍将由一个线程和一个数据库连接处理,但它们将从池中获取,而不是每个用户专用一个。
答案 1 :(得分:1)
因为维护大量线程的开销不高效。当用户数量超过应用程序服务器或数据库的用户可以维护时会发生什么?当数据库表上存在大量争用时会发生什么?
通过使用连接池,您无需再次从头开始“连接”到数据库,因此通过重用池中的数据库连接可以大大提高性能。
如果您没有使用应用服务器,那么像Apache's DBCP这样的地方就是一个很好的起点。