代码之家  ›  专栏  ›  技术社区  ›  Boris Pavlović

java.sql.Connection是线程安全的吗?

  •  55
  • Boris Pavlović  · 技术社区  · 17 年前

    重新表述这个问题:我应该避免共享实现 java.sql.Connection 在不同的线程之间?

    5 回复  |  直到 14 年前
        1
  •  74
  •   rev_dihazum    10 年前

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

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

        2
  •  14
  •   Andrey Adamovich    17 年前

        3
  •  4
  •   Hanash Yaslem    8 年前

    这是一个相当古老的思路,但对于那些正在寻找有关Microsoft SQL Server的答案的人来说,以下是答案:

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

    和

    SQLServerConnection实现到SQLServer的JDBC连接。

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

    阅读更多 here

        4
  •  3
  •   Vadzim    8 年前

    神谕 JDBC and Multithreading 文件:

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

        5
  •  1
  •   Mirak    9 年前

    我们在其pooleddatasource的Websphere语句缓存上设置了ArrayOutOfBoundsException,我们必须禁用该缓存。

    我们接受了一种自我封闭的治疗。

    所有这些都是因为当前的连接,所以现实生活实践的结论是,你不能这样做。