69

java.sql.Connection换个说法:我应该避免共享在不同线程之间实现的类的实例吗?

4

5 回答 5

75

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

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

于 2009-10-07T11:40:50.543 回答
14

java.sql.Connection 是一个接口。所以,这一切都取决于驱动程序的实现,但一般来说,您应该避免在不同线程之间共享相同的连接并使用连接池。此外,还建议池中的连接数高于工作线程数。

于 2009-10-07T11:47:07.930 回答
4

这是一个相当老的线程,但对于那些正在寻找有关 Microsoft SQL Server 的答案的人来说,这里是答案:

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

SQLServerConnection 实现到 SQL Server 的 JDBC 连接。

从以上所有内容中,您可以共享语句但不能共享连接,并且如果您需要在每个线程中建立连接,您可以使用线程池。

在这里阅读更多

于 2018-01-31T08:05:28.730 回答
3

Oracle JDBC 和多线程文档:

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

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

于 2018-07-19T21:39:09.533 回答
1

我们在它的 pooleddatasource 的 Websphere 语句缓存上有 ArrayOutOfBoundsException,我们必须禁用该缓存。

我们有一种自我封闭的治疗方法。

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

于 2017-09-28T21:20:15.173 回答