5 个回答

虽然没有明确的标准,但如果连接池不是线程安全应该就不会有人用了。

连接池就是为多线程设计,正常使用并不需要额外的同步机制。但JDBC的对象Connection, Statement / PreparedStatement 或 ResultSet 都不是线程安全的,也不是资源安全的。不能在多个线程中共享这些对象。

首先,在回答这个问题之前,我们得先了解一下数据库连接池是干什么用的?顾名思义,数据库连接池就用用来保存数据库连接的一个池子。每当我们的业务代码需要和数据库进行交互时,就从这个池子里面取出一个数据库连接,然后在这个连接上进行查增删改操作。使用结束后,业务代码再将这个连接归还给这个池子,然后这个连接就可以被其他业务代码继续使用了。

从这个过程中我们可以看到,数据库连接池是可以在多个线程中使用的,不可能创建一个线程,就创建一个数据库连接池。因此数据库连接池必定是线程安全的。然而单个数据库连接肯定不是线程安全的,不然就没法实现事务了。数据库连接池本身的涉及,也避免了多个线程同时共享一个连接的情况,一个连接必须先向连接池申请才能获得,使用结束必须归还连接池才能给下一个线程使用。

总结来说,数据库连接池必定是线程安全的,数据库连接不是。

池这种设计模式的特性之一就是线程安全性。如果一个数据库连接池的实现存在线程不安全的情况,那就属于 bug。所以对于连接池的稳定版本,可以放心使用。

数据库连接池肯定是线程安全的,每一个线程从池子里拿到一个链接进行数据库操作时,决不允许另一个线程同时拿到这个链接进行操作,不然如何区分返回的数据是哪个线程请求的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题