1 publicString test() {2 String result = "";3 CountDownLatch rollBackLatch = new CountDownLatch(1);4 CountDownLatch mainThreadLatch = new CountDownLatch(2);5 AtomicBoolean rollbackFlag = new AtomicBoolean(false);6 List> list = new ArrayList>();7 //线程有返回值
8 Future future =executor1(rollBackLatch, mainThreadLatch, rollbackFlag);9 list.add(future);10 //线程无返回值
11 executor2(rollBackLatch, mainThreadLatch, rollbackFlag);12 //主线程业务执行完毕 如果其他线程也执行完毕 且没有报异常 正在阻塞状态中 唤醒其他线程 提交所有的事务13 //如果其他线程或者主线程报错 则不会进入if 会触发回滚
14 if (!rollbackFlag.get()) {15 try{16 mainThreadLatch.await();17 rollBackLatch.countDown();18 for (Futuref : list)19 if (!"success".equals(f.get()))20 result = f.get() + "。";21 } catch (InterruptedException |ExecutionException e) {22 e.printStackTrace();23 }24 }25 returnresult;26 }27
28 @Autowired29 privatePlatformTransactionManager transactionManager;3