前段时间在做java多线程,然后涉及到了一个效率的问题。

  java多线程中,所有线程执行完毕,总共使用多少时间呢?

import java.util.concurrent.CountDownLatch;

countDwonlatch提供了最常用的一些测试方法。

创建一个countDownLatch对象:

  

 CountDownLatch countDownLatch = new CountDownLatch(500);   //这个构造函数的入参为 int num,表示当前线程的总数,这500就表示有500个线程 

countDownLatch.countDown();  //这个方法执行 会使总线程数-1,比如上面总线程为500,执行这个方法后为499,然后直到数量为0时,主线程从挂起状态恢复。

countDownLatch.await();  //将主线程挂起等待,知道countDown()将总数量变成0时,恢复主线程。

这里要注意的是,countDownLatch.await();会导致程序直接挂起,后面代码不再执行,所有如果你countDown()无效时,可能你提前await()该线程。

正确的使用方式是,要全部的(充分的)执行完countDwon();后在紧跟await();

下面列出代码:

public class threadTimtCount implements Runnable {   static long startTime = System.currentTimeMillis();// 开始时间    final static CountDownLatch countDownLatch = new CountDownLatch(500);public static void main(String[] args) throws InterruptedException {threadTimtCount count = new threadTimtCount();        for (int i = 1; i <= 500; i++) {Thread thread = new Thread(count);
            thread.start();                //countDownLatch.await(); 错误的写法,这会导致thread执行一遍之后,线程被挂起,然后第二次for循环无法执行了(程序挂起等待),这样造成程序假死(卡死)}countDownLatch.await();  //一定要等到countDown()方法执行完毕后才使用System.out.println("执行总时间:"+(System.currentTimeMillis()-startTime)); }@Overridepublic void run() {try {Thread.sleep(timeIndex);System.out.println("currThread " + Thread.currentThread().getName());} catch (InterruptedException e) {// TODO Auto-generated catch block
            e.printStackTrace();}finally{countDownLatch.countDown();}}
}

转载于:https://www.cnblogs.com/jack-xsh/p/8615644.html

java多线程测试性能,总线程使用总时间。相关推荐

  1. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现

    为什么需要线程池 我们有两种常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口.但是我们创建这两种线程在运行结束后都会被 ...

  2. Java 多线程 测试

    Java 多线程 测试 1 Callable 2 Runnable 3 Thread 1 Callable package com.xu.thread;import java.util.concurr ...

  3. Java 多线程(七) 线程间的通信

    Java 多线程(七) 线程间的通信--wait及notify方法 线程间的相互作用 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务. Object类中相关的方法有两个notify方法 ...

  4. Java 多线程(三) 线程的生命周期及优先级

    Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: ...

  5. Java 多线程(八) 线程状态图

    Java 多线程(八) 线程状态图 结合多线程的学习过程,介绍线程的状态图,随着学习的深入,这幅图不断加入新的内容. 一.线程基本状态图 这幅图是在Java 多线程(三) 线程的生命周期及优先级出现过 ...

  6. Java多线程详解(线程不安全案例)

    嗨喽-小伙伴们我又来了, 通过前面两章的学习,我们了解了线程的基本概念和创建线程的四种方式. 附上链接: 1.  Java多线程详解(基本概念)​​​​​​​ 2. Java多线程详解(如何创建线程) ...

  7. Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字

    线程安全问题是多线程编程中最典型的一类问题之一.如果多线程环境下代码运行的结果是符合我们预期的,即该结果正是在单线程环境中应该出现的结果,则说这个程序是线程安全的. 通俗来说,线程不安全指的就是某一代 ...

  8. java多线程测试框架(含入参和返回值)

    最近要对一个webservice接口做测试,需测试高并发接口是否会以异常数据返回,编写了如下demo,有类似需求的可以参考下. 注意事项: 1,线程使用了callable接口形式,call相对runa ...

  9. java多线程总结五:线程池的原理及实现

    1.线程池简介:     多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.         假设一个服务器完成一项任务所需时间为:T1 ...

最新文章

  1. 色情图片识别-aip
  2. 【面试虐菜】—— JAVA面试题(3)
  3. [转]emacs中文输入问题
  4. 学习opencv3中文版_给视觉组新生的一点学习建议
  5. 使用flask调用接口去加载模型和数据集,避免每次运行都会重复加载数据集或模型,节约大量等待时间
  6. 加法变乘法(蓝桥杯)
  7. Python实现人脸识别 + 手机推送功能,老板来了你就会收到短信提示
  8. 猫眼java开发工资_Java硕士京东工作1年,跳槽后他期望薪资26K,大家感觉他可以吗...
  9. jfinal-layui中如果sql是多表时条件查询写法
  10. Navicat获取注册码
  11. RobotStudio软件:ABB机器人喷涂虚拟仿真
  12. android studio keymap eclipse,android studio eclipse keymap theme 快捷键 主题风格设置
  13. 让孩子更快乐地学编程,一套积木就够了,长毛象AI百变编程积木套件体验
  14. 实验2 格式化输入输出和分支语句
  15. 语音转换成文本 技术实现_职业转换者指南,帮助您实现梦想的技术工作
  16. 15W无线充电芯片介绍
  17. Python量化选股入门:资本资产定价模型(CAPM)
  18. 密码加密解密(一)——摩斯密码
  19. SSH tunnel 隧道技术
  20. Photoshop各历史版本回顾以及系统要求

热门文章

  1. SQL Server 函数的使用(数学函数)
  2. dbc文件c语言解析标准,DBC文件解析CAN信息
  3. p70_域名解析系统DNS
  4. 牛客网暑期ACM多校训练营7: C. Bit Compression(DFS+预处理)
  5. bzoj 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场(DFS)
  6. NYOJ 82:迷宫寻宝(一)(BFS)
  7. 用Python3.6操作HBase之HBase-Thrift
  8. jquery创建添加append、prepend、appendTo、prependTo、after、insertAfter、before、insertBefore
  9. python:from skimage.measure import find_contours
  10. 2019 杭电多校第六场 题解