Multithreading 跨线程共享连接的JDBC自动提交

Multithreading 跨线程共享连接的JDBC自动提交,multithreading,jdbc,autocommit,Multithreading,Jdbc,Autocommit,我有一个servlet,在这里我得到一个连接对象,然后将它交给两个工作线程来执行各种活动。我现在需要在一个线程上添加一个事务 如果我启动这样的事务: connection.setAutoCommit(false) 这会影响两个线程吗?我想会的 每个线程都必须有单独的连接吗 谢谢我认为你所做的是非常糟糕的练习。不能在线程之间共享JDBC连接 如果您在应用程序服务器(如TOMCAT/JBoss/WebSphere/WebLogic)下运行,请使用适当的数据源来获取您需要的连接 查看您的应用程序服务器

我有一个servlet,在这里我得到一个连接对象,然后将它交给两个工作线程来执行各种活动。我现在需要在一个线程上添加一个事务

如果我启动这样的事务: connection.setAutoCommit(false)

这会影响两个线程吗?我想会的

每个线程都必须有单独的连接吗


谢谢

我认为你所做的是非常糟糕的练习。不能在线程之间共享JDBC连接

如果您在应用程序服务器(如TOMCAT/JBoss/WebSphere/WebLogic)下运行,请使用适当的数据源来获取您需要的连接

查看您的应用程序服务器文档以获取有关如何执行此操作的信息

您的servlet中将有如下内容:

public void doGet(HttpServletRequest req, HttpServletResponse resp)
{
    Connection c = null;
    try {
        c = ...; /* preferred way of getting a connection in your AppServer
        // do what you need with your JDBC connection
    } catch (Exception e) {
        // handle errors
    } finally {
        c.close(); /* you will need another TRY/CATCH here */
    }
}
类似地,您的工作线程将具有如下内容:

public void run()
{
    Connection c = null;
    try {
        c = ...; /* preferred way of getting a connection in your AppServer
        // do what you need with your JDBC connection
    } catch (Exception e) {
        // handle errors
    } finally {
        c.close(); /* you will need another TRY/CATCH here */
    }
}

最后,您可以在单独的连接对象上设置
自动提交

除非在JDBC驱动程序手册中明确说明,否则实际上无法共享连接。您完全正确。我没有考虑共享连接的含义,所以我正在调整每个线程以获得它自己的连接。