面试官问:数据库连接池为什么要用threadlocal?不用会怎样?
回归正题,还是拿上面的图来说事。。。。
1、两者有根本性的区别,用处不一样!
-
连接池是缓存并托管数据库连接,主要是为了提高性能。
-
而ThreadLocal缓存连接,是为了把同一个数据库连接“分享”给同一个线程的不同调用方法。(不管调用哪个方法,都是使用的同一个连接,方便进行“跨方法”的事务控制)
2、重点要理解“连接池”
java.sql.DriverManager.getConnection(url, props);
java.sql.Driver.connect(url, props);
不同的线程在同一个时间( 或者 同一个线程在多个地方)从连接池中拿到的Connection,肯定不是同一个连接。(反过来讲:不同时间的两个线程,一前一后,则有可能拿到同一个连接)
总结:
往期推荐