我认为找到这个答案很容易......但不是那么多。
有没有人知道OracleDataSource.getConnection方法是否是线程安全的?
我不是指它返回的Connection对象,而是调用getConnection本身。
文档和类没有明确说明,但就像它是一个连接池一样,我倾向于相信它。
答案 0 :(得分:-1)
这是 Java Concurrency in Practice(Brian Goetz)中讨论的问题:
<强> 4.5.1。解释模糊文档
许多Java技术规范对于线程安全保证和ServletContext,HttpSession或DataSource等接口的要求都是沉默的,或者至少是不可取的。
...有关servlet的信息......
可以对JDBCDataSource接口进行类似的推断,该接口表示可重用数据库连接池。 DataSource为应用程序提供服务,并且在a的上下文中没有多大意义 单线程应用程序。很难想象一个不涉及从多个线程调用getConnection的用例。而且,与servlet一样,JDBC规范中的示例并未建议在使用DataSource的许多代码示例中需要任何客户端锁定。因此,即使规范不承诺DataSource是线程安全的,或者要求容器供应商提供线程安全的实现,同样的“如果它是荒谬的” 不是“参数,我们别无选择,只能假设DataSource.getConnection不需要额外的客户端锁定。 ...