Java 在SpringJDBC中,两个线程可以同时保持一个连接吗?

Java 在SpringJDBC中,两个线程可以同时保持一个连接吗?,java,spring,jdbc,spring-jdbc,Java,Spring,Jdbc,Spring Jdbc,在这方面,提交人说: “在此更改之后,存储 序列表使用的引擎可以是MyISAM或INNODB,因为 使用新连接分配序列,无需 受可能正在进行的任何其他交易的影响。 “ 为什么要创建一个新连接来启动事务?我认为,如果一个连接不是由两个线程同时持有,那么在这个连接上就不会有“其他事务”。一个连接能同时被两条线连接吗 为什么要创建一个新连接来启动事务 因为没有办法绕过它。必须先与数据库建立连接,然后才能查询数据库 一个连接能同时被两条线连接吗 是的。特别是当两个线程在不同的表中运行时。为什么不重用现有

在这方面,提交人说:

“在此更改之后,存储 序列表使用的引擎可以是MyISAM或INNODB,因为 使用新连接分配序列,无需 受可能正在进行的任何其他交易的影响。 “

为什么要创建一个新连接来启动事务?我认为,如果一个连接不是由两个线程同时持有,那么在这个连接上就不会有“其他事务”。一个连接能同时被两条线连接吗

为什么要创建一个新连接来启动事务

因为没有办法绕过它。必须先与数据库建立连接,然后才能查询数据库

一个连接能同时被两条线连接吗

是的。特别是当两个线程在不同的表中运行时。为什么不重用现有的连接呢?在更现代的框架中,您会发现连接池中有一个打开的连接池,可供任何线程使用。拥有一个连接池是更好的做法

为什么要创建一个新连接来启动事务

因为没有办法绕过它。必须先与数据库建立连接,然后才能查询数据库

一个连接能同时被两条线连接吗


是的。特别是当两个线程在不同的表中运行时。为什么不重用现有的连接呢?在更现代的框架中,您会发现连接池中有一个打开的连接池,可供任何线程使用。拥有一个连接池是一种更好的做法。

多线程共享一个连接虽然在理论上是可能的,但在实践中却是一个坏主意。尽可能避免这种情况,并且只有在这些线程仔细协调它们的活动时才这样做(例如,您不希望一个线程提交或回滚,而另一个线程仍在完全工作,希望事务继续)。@AlanSereb在这个链接中,作者对代码进行了优化。原始代码获得当前线程的连接,优化后的代码获得新的连接。所以我问一个连接是否可以同时由两个线程保持。如果允许,那么正如Mark Rottelveel所说,代码并不健壮。如果不允许,这种优化似乎不是很有用。通过您的解释,我可以理解因为Spring可以使用不同的数据源和不同的连接分配策略,所以可能有一种允许线程共享连接的策略,是吗?@kongtianyi。同样,在多个线程之间使用连接是个坏主意。在提供的代码中,开发人员默认为true(这意味着对不同的线程使用不同的连接),但如果有人不这样做,请留下另一个选项。@AlanSereb我问题的关键是Spring中的线程是否可以同时共享连接。如果没有,即使作者没有优化,代码仍将使用当前线程的连接,并且不会有事务冲突。根据您提供的,可能有允许共享连接的策略,因此感谢您的回答。通过多个线程共享一个连接虽然理论上可能,这在实践中是个坏主意。尽可能避免这种情况,并且只有在这些线程仔细协调它们的活动时才这样做(例如,您不希望一个线程提交或回滚,而另一个线程仍在完全工作,希望事务继续)。@AlanSereb在这个链接中,作者对代码进行了优化。原始代码获得当前线程的连接,优化后的代码获得新的连接。所以我问一个连接是否可以同时由两个线程保持。如果允许,那么正如Mark Rottelveel所说,代码并不健壮。如果不允许,这种优化似乎不是很有用。通过您的解释,我可以理解因为Spring可以使用不同的数据源和不同的连接分配策略,所以可能有一种允许线程共享连接的策略,是吗?@kongtianyi。同样,在多个线程之间使用连接是个坏主意。在提供的代码中,开发人员默认为true(这意味着对不同的线程使用不同的连接),但如果有人不这样做,请留下另一个选项。@AlanSereb我问题的关键是Spring中的线程是否可以同时共享连接。如果没有,即使作者没有优化,代码仍将使用当前线程的连接,并且不会有事务冲突。根据您提供的,可能有允许共享连接的策略,因此感谢您的回答。