平台网站,服务好的做培训网站,利州区住房和城乡建设部网站,google浏览器下载CountDownLatch 同时等待 N 个任务执行结束.
好像跑步比赛#xff0c;10个选手进行比赛, 所有选手都通过终点#xff0c;才能公布成绩。
代码示例:
构造 CountDownLatch 实例, 初始化 10 表示有 10 个任务需要完成.每个任务执行完毕, 都调用 latch.countDown() . 在 Count… CountDownLatch 同时等待 N 个任务执行结束.
好像跑步比赛10个选手进行比赛, 所有选手都通过终点才能公布成绩。
代码示例:
构造 CountDownLatch 实例, 初始化 10 表示有 10 个任务需要完成.每个任务执行完毕, 都调用 latch.countDown() . 在 CountDownLatch 内部的计数器同时自减.主线程中使用 latch.await(); 阻塞等待所有任务执行完毕. 相当于计数器为 0 了.
class Test{public static void main(String[] args) throws InterruptedException {CountDownLatch latch new CountDownLatch(10);Random random new Random();Runnable runnable new Runnable() {Overridepublic void run() {int time random.nextInt(3);try {Thread.sleep(time*1000);System.out.println(Thread.currentThread().getName() 跑到终点了!);// 线程跑到终点了latch.countDown();} catch (InterruptedException e) {throw new RuntimeException(e);}}};for (int i 0; i 10; i) {Thread t new Thread(runnable);t.start();}// 必须等到 10 个线程都跑到终点才继续执行latch.await();System.out.println(10 个线程都已跑到终点);}
}实际开发中 CountDownLatch 也是有许多应用场景的, 比如下载一个大文件, 如 视频,好几个 G,
就可以把一个大的文件分成好几个小一点的文件, 使用多个线程分别下载, 这样就比单个线程下载的快.使用 CountDownLatch 就可以区分是否将一个文件的所有部分都下载完了.