Gahing's blog Gahing's blog
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Gahing / francecil

To be best
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 中间件

  • 云原生

  • 分布式

  • 存储技术

  • 数据库

  • 服务部署

  • 编程语言

    • Go

    • Java

      • Android Binder学习笔记
      • BigInteger源码解析
      • CountDownLatch使用之统计任务花费时间
      • Integer 源码方法学习
      • Java Executors 学习笔记
      • Java IO
      • Java NIO
      • NDK-JNI开发笔记
      • OpenGL ES 开发笔记
      • ThreadLocal
      • 「Java并发编程」读书笔记
      • 「垃圾收集」学习笔记
      • 动手写一个并发缓存框架 历程
  • 计算技术

  • 服务端
  • 编程语言
  • Java
gahing
2020-06-29

CountDownLatch使用之统计任务花费时间草稿

CountDownLatch是一种闭锁,延迟线程的进度直到终止状态 包括一个计数器,初始化一个正数,表示需要等待的事件数量。

countDown:递减计数器 await:等待计数器直到0

import java.util.concurrent.CountDownLatch;

public class TestCountDownLatch {
	public static long timeTasks(int nThreads,final Runnable task) throws InterruptedException{
		final CountDownLatch startLatch=new CountDownLatch(1);
		final CountDownLatch endLatch = new CountDownLatch(nThreads);
		final StringBuffer stringBuffer=new StringBuffer();
		for(int i=0;i<nThreads;i++){
			 Thread t=new Thread(){
				public void run(){
					System.out.println("初始化线程资源");
					try{
						startLatch.await();
						try{
							//do something
							task.run();
						}finally{
							endLatch.countDown();
						}
						
					}catch(InterruptedException ignored){}
				}	
			};
			t.start();
		}
		long start = System.nanoTime();
		stringBuffer.append("startLatch await pre end\n");
		//初始化线程资源:如创建线程等,这些时间花费是不要算入任务时间的
		//调用countDown用 所有线程开始进行run方法
		startLatch.countDown();
		//等待所有线程结束
		endLatch.await();
		long end=System.nanoTime();
		System.out.println(stringBuffer.toString());
		return end-start;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Runnable runnable=new Runnable() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				try {
					Thread.sleep(3000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		};
		try {
			System.out.println("使用时间:"+timeTasks(5,runnable));
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
编辑 (opens new window)
上次更新: 2023/08/26, 10:18:07
BigInteger源码解析
Integer 源码方法学习

← BigInteger源码解析 Integer 源码方法学习→

最近更新
01
我的 2024 总结
12-31
02
浅谈代码质量与量化指标
08-27
03
快速理解 JS 装饰器
08-26
更多文章>
Theme by Vdoing | Copyright © 2016-2025 Gahing | 闽ICP备19024221号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式