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

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

慕田峪9158850
浏览 122回答 3
3回答

慕的地10843

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

蓝山帝景

有多个方法可以解决,比较方便的办法有三种:1、采用CountDownLatchCountDownLatch 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个线程都执行完时,获取响应的过程也就结束了。然后再执行下面的四个。同理。

婷婷同学_

或者先把 n-4个线程先放到一个list A中,把另外4个放到另一个listB中.先执行list A中的所有线程,当A执行完最后一个时(可以通过计数器等实现),开始执行B中的线程.
打开App,查看更多内容
随时随地看视频慕课网APP