/** * 1.线程池执行不同的业务逻辑. * 2.获取每个任务执行的结果 * 3.最后的结果会用到之前的结果 */ public class SearchUserListDTO { public static void main(String[] args) throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(3); CountDownLatch countDownLatch = new CountDownLatch(3); //线程计数器,就是线程的个数 try { executorService.execute(new Runnable() { //不是异步的没有返回值 @Override public void run() { try { Thread.sleep(1000L); countDownLatch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("111"); } }); //一个线程池,三个线程,执行三个任务,只有当这三个任务执行完以后,主线程才会执行 executorService.execute(new Runnable() { @Override public void run() { try { Thread.sleep(2000L); countDownLatch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("222"); } }); executorService.execute(new Runnable() { @Override public void run() { try { Thread.sleep(3000L); countDownLatch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("333"); } }); //主线程阻塞,如果线程池之间也是需要前后结果的话,应该也是阻塞的 countDownLatch.await(); //只有当countDown变为0的时候,主线程才不是阻塞的 } finally { executorService.shutdown(); } }
多线程-线程池执行多业务逻辑
最新推荐文章于 2024-07-23 21:34:57 发布