java怎么控制多线程的事务??

就是几个线程的结果如果都成功了,就一起提交。如果有一个失败就全部回滚,并给出相关提示信息?网上没找到比较好的方案

DIEA
浏览 1602回答 8
8回答

慕斯王

多个线程好解决,楼主想问的是不同进程怎么同步事务吧,比如多个dubbo服务。确实有这个问题,首先有这样的技术,可以强一致,但效率牺牲太多,很少有公司这么干;大多数做法都是:服务A提交后,在某个东西(比如zookeeper)上记录节点;服务B提交后,记录另一个节点(这些节点都在表示本次事务的树枝节点下)……后续有个监听器类的东西,检查树枝节点下的节点数、状态等,如果有问题分别回滚或重试或人工干预等等……

Smart猫小萌

数据库事务多线程比较麻烦,因为: 这会占用大量数据库连接; 不能用线程池,因为线程运行到最后必须等待协调,要么回滚要么提交。

慕桂英4014372

在主方法new 一个InheritableThreadLocal 并设值为true,线程中如果出错则把值改为false。线程全部执行完之后,判断InheritableThreadLocal 的值,如果为false,你就手动抛出异常声明式回滚,或者自己写手动回滚。这样应该可以达到你的要求吧

阿波罗的战车

CycleBarrier可能用得上。

aluckdog

通过一个线程安全的标志状态来同步吧

拉丁的传说

CountDownLatch 加上一个封装 transaction 和 state 的 queue 每个线程执行时,去队列中拿一个事务,执行完finally 扔回去并 count() , 并设置state = true;最后在主线程判断所有transaction 的state 都是true ,然后就全部提交
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java