连接线程安全吗?

换句话说: 我是否应该避免在不同线程之间共享实现 java.sql.Connection的类的实例?

52110 次浏览

如果 JDBC 驱动程序符合规范,那么从技术上来说,是的,对象是线程安全的,但是您应该避免在线程之间共享连接,因为连接上的活动将意味着一次只有一个线程能够做任何事情。

您应该使用连接池(如 Apache Commons DBCP)来确保每个线程获得自己的连接。

Java.sql.连接是一个接口。因此,这完全取决于驱动程序的实现,但通常应该避免在不同线程之间共享相同的连接并使用连接池。此外,还建议池中的连接数高于工作线程数。

我们在它的池数据源的 WebSphere 语句缓存上有 ArrayOutOfBoundsException,我们必须禁用该缓存。

我们有一种治疗方法,能够阻止自己。

所有这一切都是因为当前接触到的连接,所以通过现实生活的实践得出的结论是,你一定不能这样做。

这是一个老生常谈的话题,但是对于那些寻找 Microsoft SQL Server 答案的人来说,这里有一个答案:

SQLServerConnection 不是线程安全的,但是从单个连接创建的多个语句可以在并发线程中同时处理。

还有

SQLServerConnection 实现到 SQLServer 的 JDBC 连接。

综上所述,可以共享语句,但不能共享 Connections,如果需要在每个线程中建立连接,可以使用线程池。

阅读更多 给你

Oracle JDBC 与多线程文档:

因为所有 Oracle JDBC API 方法都是同步的,如果两个线程试图同时使用连接对象,那么其中一个线程将被迫等待,直到另一个线程完成使用。

所以在 Oracle 的情况下可能是安全的,但是并发访问会受到瓶颈的影响。