当前位置: 首页 > 面试题库 >

如何在多线程之间共享一个事务

慕弘深
2023-03-14
问题内容

我们遇到了适用于多线程的方案。

在主线程中,执行一些逻辑操作并更新数据库,在某种程度上,它将调用另一个服务来更新数据库,该服务在另一个线程中运行。

我们希望两个线程共享同一个事务,这意味着任何一个线程中的任何一个操作都将失败,那么另一个线程中的该操作也将被回滚。

但是工作了几天,我发现一些帖子说JTA不支持多线程。当前我们使用Bitronix作为JTA提供者,有没有人知道Bitronix是否在一个Transaction中支持多线程?还是有其他JTA提供程序支持此功能(独立的JTA提供程序而不是J2EE容器)?


问题答案:

“多个线程可以同时与同一全局事务关联。” -JTA规范v1.1,第3.2节,第13页。

JBossTS会解决这个问题。除了检查交易行为,困难实际上不是交易经理。您还需要正确处理与资源管理器即数据库的连接。如果在线程之间共享一个连接,则串行运行不一定会加速,因为除非驱动程序支持有效的多路复用,否则这是一个潜在的瓶颈。另一方面,如果使用多个连接,则需要确保驱动程序明智地实现isSameRM以避免2PC,并且如果线程需要查看彼此对数据库的未提交更改,则还应允许事务分支锁共享(紧密耦合)。因此,除了一个好的事务管理器之外,您还需要一个好的连接管理器,例如JCA实现和一个好的数据库驱动程序



 类似资料:
  • 背景:我正在并行运行自动化测试。使用pom.xml中的分叉,多个浏览器在相同数量的线程中启动,即1个浏览器是1个线程。 中的下面插件创建了与线程(fork)计数相等数量的。 所有这些类都同时并行执行。因此,似乎每当我创建或时,每个线程都会创建自己的这些,因此跨多个线程共享变量的概念是不起作用的。 我只想让一个线程访问“准备测试数据”函数,并将<code>标志 我正在按照教程https://www.

  • 问题内容: 我想像这样在多个线程之间共享一个变量: 我想在主线程和帮助线程之间共享,这是我创建的两个不同的Java类。有什么办法吗?谢谢! 问题答案: 二者并可以参照包含该变量的类。 然后,可以使该变量为 volatile ,这意味着 对该变量的更改在两个线程中立即可见。 有关更多信息,请参见本文。 易变变量 共享已同步的可见性功能,但不共享原子性功能。这意味着线程将自动 查看volatile变量

  • 问题内容: 我有两个线程。可以调用修改变量的类的update方法。另一个调用读取该变量的类的update方法。只有一个线程写入,一个(或多个)线程读取该变量。由于我是多线程技术的新手,我需要在并发方面做什么? 谢谢, 问题答案: 如果有且仅有一个写线程,你可以逃脱使得它。否则,请查看答案。 仅在只有一个写线程的情况下才起作用,因为只有一个写线程,因此它始终具有的正确值。

  • 我们有两个网站有多种产品。我们决定在这些网站之间只共享一个目录,其中包含所有产品,没有任何重复。 到目前为止,我可以在两个网站上看到所有的产品,但是我们有一些产品应该只在一个网站上显示。 有什么解决办法吗?我们使用的是Hybris 5.2 到目前为止,我们的想法是: 使用类别组织(站点A的类别,站点B的类别,共享产品的类别 在我们的情况下,哪种解决方案是最好的,还有其他解决方案吗?

  • 问题内容: 我正在建立一个电子商务网站(基于shopify),并且使用多个小型angularjs应用程序来处理诸如快速购物车,收藏夹,过滤产品和其他一些较小物品的事情。我最初使用的是一个大型应用程序(具有路由和所有功能),但是当我没有完整的REST API时,这有点限制性。 我想在角度应用程序之间共享一些服务(购物车服务,所以我可以有一个快速添加按钮,它将反映在微型购物车等中),但我不确定最好的解

  • 问题内容: 一个程序,该程序创建在可连接队列上工作的多个进程,并且最终可能会操纵全局字典来存储结果。(因此,每个子进程都可以用来存储其结果,并查看其他子进程正在产生什么结果) 如果我在子进程中打印字典,则可以看到对它进行的修改(即在上)。但是在主流程加入之后,如果我打印D,那就是空洞的字典! 我了解这是同步/锁定问题。有人可以告诉我这里发生了什么,如何同步对的访问? 问题答案: 普遍的答案涉及使用