OracleDataSource.getConnection是否是线程安全的?

时间:2014-10-13 17:19:06

标签: java oracle thread-safety

我认为找到这个答案很容易......但不是那么多。

有没有人知道OracleDataSource.getConnection方法是否是线程安全的?

我不是指它返回的Connection对象,而是调用getConnection本身。

具体来说,这种方法:http://download.oracle.com/otn_hosted_doc/jdeveloper/905/jdbc-javadoc/oracle/jdbc/pool/OracleDataSource.html#getConnection()

文档和类没有明确说明,但就像它是一个连接池一样,我倾向于相信它。

1 个答案:

答案 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不需要额外的客户端锁定。   ...