譬如hikari c3p0, DBCP等
连接池就是为多线程设计,正常使用并不需要额外的同步机制。但JDBC的对象Connection, Statement / PreparedStatement 或 ResultSet 都不是线程安全的,也不是资源安全的。不能在多个线程中共享这些对象。
首先,在回答这个问题之前,我们得先了解一下数据库连接池是干什么用的?顾名思义,数据库连接池就用用来保存数据库连接的一个池子。每当我们的业务代码需要和数据库进行交互时,就从这个池子里面取出一个数据库连接,然后在这个连接上进行查增删改操作。使用结束后,业务代码再将这个连接归还给这个池子,然后这个连接就可以被其他业务代码继续使用了。
从这个过程中我们可以看到,数据库连接池是可以在多个线程中使用的,不可能创建一个线程,就创建一个数据库连接池。因此数据库连接池必定是线程安全的。然而单个数据库连接肯定不是线程安全的,不然就没法实现事务了。数据库连接池本身的涉及,也避免了多个线程同时共享一个连接的情况,一个连接必须先向连接池申请才能获得,使用结束必须归还连接池才能给下一个线程使用。
总结来说,数据库连接池必定是线程安全的,数据库连接不是。
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
2 回答2.8k 阅读✓ 已解决
虽然没有明确的标准,但如果连接池不是线程安全应该就不会有人用了。