Question1
作者说 为了确保一个线程中只有一个Connection, 我们可以使用 ThreadLocal来存放本地线程变量.
这句话本身没有问题, 但是示例代码中是通过 DriverManager.getConnection
来创建的连接, 也就是说每个连接都是全新的, 不是从连接池里取的, 也就没有线程安全问题, 没有必要使用 ThreadLocal 隔离变量.
请问我这样理解是对的吗?
Question2
当从数据库连接池中取连接的时候, 线程安全的问题是怎么产生的呢? 难道一个 Connection 资源在没有释放的情况下会再次分配出去吗?
上下文有点少,不是很清楚这里用
ThreadLocal
共享连接的目的一个线程所执行的代码逻辑中可能会多次获取连接,而且需要获取到同一个连接。因为业务逻辑要执行的SQL语句通常要处在同一个事务中,同一个事务需要同一个连接,所以用
ThreadLocal
是一件很自然的事情数据库连接池只是管理连接,自身应该是线程安全的,但是
Connection
是否线程安全(通常不)和数据库连接池也没有什么关系