博主分享免费Java教学视频,B站账号:Java刘哥
一、CountDownLatch的API
- 构造方法摘要
构造方法 Constructor and Description CountDownLatch(int count)
构造一个以给定计数CountDownLatch
CountDownLatch。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type Method and Description void
await()
导致当前线程等到锁存器计数到零,除非线程是 interrupted 。boolean
await(long timeout, TimeUnit unit)
使当前线程等待直到锁存器计数到零为止,除非线程为 interrupted或指定的等待时间过去。void
countDown()
减少锁存器的计数,如果计数达到零,释放所有等待的线程。long
getCount()
返回当前计数。String
toString()
返回一个标识此锁存器的字符串及其状态。
- public static void main(String args[]) throws InterruptedException {
- final CountDownLatch latch = new CountDownLatch(5);//设置计数值为5
- System.out.println("开始你的表演!");
- for(int i=0;i<3;i++) {
- latch.countDown();
- System.out.println("latch.getCount:"+latch.getCount());
- }
- latch.await();
- System.out.println("再见吧,大海!");
- }
- public static void main(String args[]) throws InterruptedException {
- final CountDownLatch latch = new CountDownLatch(5);//设置计数值为5
- System.out.println("开始你的表演!");
- for(int i=0;i<8;i++) {
- latch.countDown();
- System.out.println("latch.getCount:"+latch.getCount());
- }
- latch.await();
- System.out.println("再见吧,大海!");
- }
二、求多线程的运行时间
CountDownLatch 允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。 这里我们可以实现一个功能,就是 “统计多线程的执行时间”,因为我们需要判断多线程是什么时候 start的,什么时候 end 的。而正好 CountDownLatch 类可以帮助我们知道什么时候结束。 让我们一步步实现它! 1、如何计算某段代码的运行时间- public static void main(String args[]) {
- long startTime = System.currentTimeMillis();
- for(int i=0;i<1000;i++) {
- System.out.println(i);
- }
- long endTime = System.currentTimeMillis();
- System.out.println((endTime-startTime)+"ms");//13ms
- }
- public static void main(String args[]) {
- System.out.println("主线程开始");
- long startTime = System.currentTimeMillis();
- for(int i=0;i<5;i++) {
- new Thread() {
- @Override
- public void run() {
- System.out.println(currentThread().getName()+"开始执行..");
- try {
- sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println(currentThread().getName()+"结束执行..");
- }
- }.start();
- }
- long endTime = System.currentTimeMillis();
- System.out.println("多线程运行时间:"+(endTime-startTime)+"ms");//2ms
- System.out.println("主线程结束");
- }
- public static void main(String args[]) throws InterruptedException {
- CountDownLatch latch = new CountDownLatch(5);//设置计数值
- System.out.println("主线程开始");
- long startTime = System.currentTimeMillis();
- for(int i=0;i<5;i++) {
- new Thread() {
- @Override
- public void run() {
- System.out.println(currentThread().getName()+"开始执行..");
- try {
- sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println(currentThread().getName()+"结束执行..");
- latch.countDown();
- }
- }.start();
- }
- latch.await();
- long endTime = System.currentTimeMillis();
- System.out.println("多线程运行时间:"+(endTime-startTime)+"ms");//1007ms
- System.out.println("主线程结束");
- }
- 微信
- 交流学习,有偿服务
- 博客/Java交流群
- 资源分享,问题解决,技术交流。群号:590480292
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏