java.sql.Connection
换个说法:我应该避免共享在不同线程之间实现的类的实例吗?
5 回答
如果 JDBC 驱动程序符合规范,那么技术上是的,该对象是线程安全的,但您应该避免在线程之间共享连接,因为连接上的活动意味着一次只有一个线程能够做任何事情.
您应该使用连接池(如Apache Commons DBCP)来确保每个线程都有自己的连接。
java.sql.Connection 是一个接口。所以,这一切都取决于驱动程序的实现,但一般来说,您应该避免在不同线程之间共享相同的连接并使用连接池。此外,还建议池中的连接数高于工作线程数。
这是一个相当老的线程,但对于那些正在寻找有关 Microsoft SQL Server 的答案的人来说,这里是答案:
SQLServerConnection 不是线程安全的,但是从单个连接创建的多个语句可以在并发线程中同时处理。
和
SQLServerConnection 实现到 SQL Server 的 JDBC 连接。
从以上所有内容中,您可以共享语句但不能共享连接,并且如果您需要在每个线程中建立连接,您可以使用线程池。
在这里阅读更多
Oracle JDBC 和多线程文档:
因为所有 Oracle JDBC API 方法都是同步的,如果两个线程尝试同时使用连接对象,那么一个线程将被迫等待,直到另一个线程完成使用。
所以在 Oracle 的情况下它可能是安全的,但并发访问会遇到瓶颈。
我们在它的 pooleddatasource 的 Websphere 语句缓存上有 ArrayOutOfBoundsException,我们必须禁用该缓存。
我们有一种自我封闭的治疗方法。
所有这一切都是因为当前可以访问连接,所以通过现实生活实践得出的结论是,你不能这样做。