为了账号安全,请及时绑定邮箱和手机立即绑定

一道面试题,求实现思路!

一道面试题,求实现思路!

慕田峪9158850 2022-10-13 11:11:48
一个交易清算处理,里面有n(10)个线程,现在需要实现以下功能,n(10)个线程中,n-4(6)个线程全部同时执行完成后,再执行剩下的4个线程。
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

用CountDownLatch计数执行就可以。
由于是清算业务,涉及数据库操作。傻一点的办法就写两份代码,一份代码跑4个线程,每次执行都检查那6个线程的数据库操作是否完成,然后再执行。

查看完整回答
反对 回复 2022-10-16
?
蓝山帝景

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个线程都执行完时,获取响应的过程也就结束了。然后再执行下面的四个。同理。

查看完整回答
反对 回复 2022-10-16
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

或者先把 n-4个线程先放到一个list A中,把另外4个放到另一个listB中.先执行list A中的所有线程,当A执行完最后一个时(可以通过计数器等实现),开始执行B中的线程.

查看完整回答
反对 回复 2022-10-16
  • 3 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号