一个交易清算处理,里面有n(10)个线程,现在需要实现以下功能,n(10)个线程中,n-4(6)个线程全部同时执行完成后,再执行剩下的4个线程。
3 回答

慕的地10843
TA贡献1785条经验 获得超8个赞
用CountDownLatch计数执行就可以。
由于是清算业务,涉及数据库操作。傻一点的办法就写两份代码,一份代码跑4个线程,每次执行都检查那6个线程的数据库操作是否完成,然后再执行。

蓝山帝景
TA贡献1843条经验 获得超7个赞
有多个方法可以解决,比较方便的办法有三种:
1、采用CountDownLatch
CountDownLatch latch=new CountDownLatch(n-4);
声明之后,将latch塞给n-4个线程,然后让每个线程run方法的最后,都执行latch.countDown(),当n-4个线程都执行完时,latch的计数器也被减为0了,此时即一起完成了。然后再将latch赋值为new CountDownLatch(4),将剩余的线程启动即可。
2、采用CyclicBarrier
逻辑与上面一样
3、采用future
也一样,取出n-4个线程,构建成n-4个future,扔入多线程执行器执行,然后遍历执行future.get(xxxx)函数去同步获取响应。当n-4个线程都执行完时,获取响应的过程也就结束了。然后再执行下面的四个。同理。

婷婷同学_
TA贡献1844条经验 获得超8个赞
或者先把 n-4个线程先放到一个list A中,把另外4个放到另一个listB中.先执行list A中的所有线程,当A执行完最后一个时(可以通过计数器等实现),开始执行B中的线程.
添加回答
举报
0/150
提交
取消