java多线程测试性能,总线程使用总时间。主要用于返回主线程

2023-10-27

java多线程测试性能,总线程使用总时间。


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

返回主线程的方法

前段时间在做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)); 
    }

    @Override
    public 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();
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java多线程测试性能,总线程使用总时间。主要用于返回主线程 的相关文章

随机推荐

  • 眼底图像血管分割学习笔记

    一 图像处理 训练集的图片格式为tif 其中相应的分割标签格式 为gif 一开始想着这些图片是不是都要先转换成 jpg或者 png 在查阅了一些资料后其实还是不太清楚 然后在看别人的代码时 发现没有处理 所以就先这样弄着 出现的问题 cla
  • Centos7 上的sqlite3安装及升级

    一 wget升级 yum install y wget 二 sqlite3安装 sudo yum install sqlite devel 查看sqlite3的版本 sqlite3 version 三 sqlite3升级 下载源码 wget
  • 试试这两个方法,做视频二次剪辑并不难,新手一天可以收入200

    很多新手看到别人每天做短视频一个月有过万 几万的收益 看到别人能赚钱 觉得自己可能赚不到这么多 赚个7 8千应该没问题 于是开始自己学着也做起了短视频自媒体 每天埋头苦干 但每天的收益却很低 只有几块 几十 有的甚至更少 跟自己想象的完全不
  • 部署Promethuse监控Hadoop节点

    部署Promethuse监控Hadoop节点 目标 安装 将hadoop的jmx信息采集到指定端口 配置prometheus 其他说明 目标 Hadoop本身是对相当数量的指标 metrics 进行实时监控的 但是Hadoop本身并不提供方
  • Java多线程详解及示例

    Java多线程详解 摘要 本文将深入探讨Java多线程编程的重要性和使用方法 介绍多线程概念 讨论多线程的优势 并提供实际示例 此外 还将探讨多线程编程中的常见问题以及如何避免这些问题 通过本文 您将获得对Java多线程编程的全面理解和实践
  • html5 游戏 动画设计,HTML5 Canvas 动画实例

    原标题 HTML5 Canvas 动画实例 在开发在线游戏时 绘制动画是非常重要的 本节介绍一个使用 Canvas API 实现的动画实例 游戏人物的跑步动画 动画的概念及原理 1 动画 动画是通过一幅幅静止的 内容不同的画面 即帧 快速播
  • 【六祎-JS特效】页面JS特效背景

    JS代码
  • Python3中strip()、lstrip()、rstrip()用法详解

    Python中有三个去除头尾字符 空白符的函数 它们依次为 strip 用来去除头尾字符 空白符 包括 n r t 即 换行 回车 制表符 空格 lstrip 用来去除开头字符 空白符 包括 n r t 即 换行 回车 制表符 空格 rst
  • 流式计算简介

    1 数据的时效性 日常工作中 我们一般会先把数据存储在一张表中 然后对这张表的数据进行加工 分析 那这里是先存储在表中 那就会涉及到时效性这个概念 如果我们处理以年 月为单位的级别的数据处理 进行统计分析 个性化推荐 那么数据的的最新日期离
  • Docker容器学习笔记

    目录 一 初始Docker 1 1Docker的概念 1 2Docker的安装 1 3Docker的架构 1 4Docker配置镜像加速器 二 Docker命令 2 1服务相关的命令 2 2镜像相关命令 2 3容器相关命令 三 Docker
  • 小程序实现搜索历史记录,去重搜索字段以及限制展示字段数量

    使用微信小程序实现搜索历史记录 去重搜索字段 限制字段数量以及点击重新搜索功能 对应界面
  • 指纹功能适配文档

    指纹功能适配文档 本文档主要介绍第三方设备厂商如何将指纹功能集成到系统中 另外也简单描述了系统上的用户认证流程 指纹功能的集成需要实现系统定义的指纹接口规范 然后将实现的接口程序安装到系统中 并提供规范中定义的配置文件 就可在重启后使用系统
  • 口罩检测——环境准备(1)

    文章目录 前言 一 工具及环境要求 工具 本地环境要求 二 工具介绍 1 labelimg 2 AI Studio 3 YOLO2COCO 4 PaddleUtils 5 paddleyolo 三 库的安装 总结 前言 小编之前做过一期 O
  • Matlab 2016a 安装教程

    Matlab 2016a 安装包及破解教程百度云分享链接 链接 https pan baidu com s 1i6BgD8p 密码 17gg Matlab安装教程 1 下载文件 得到R2016a win64 part1 rar R2016a
  • DataGrip 连接 Kerberos 认证的 hive 报 Hive JDBC Kerberose Authentication Error: GSS initiate failed 错误

    版本 hive 3 1 2 问题描述 使用工具连接 hive 时 报如下错误 The specified database user password combination is rejected 08S01 Could not open
  • producer参数---Kafka从入门到精通(七)

    上篇文章说了 kafka需要先构造properties指定server和kafka集群 key 和 value用stringSerialize序列化 通过producer发送send 需要records参数指定topic和value 之后发
  • 利用边缘监督信息加速Mask R-CNN实例分割训练

    欢迎关注 我爱计算机视觉 公众号 一个有价值有深度的公众号 今天跟大家分享一篇有意思的arXiv上新出的论文 作者来自德国宝马汽车公司 BMW Car IT GmbH Germany 的两位实习生 Mask R CNN是实例分割的经典模型
  • 【转】embedding概念理解

    原文来自google developer的机器学习入门课程 主要觉得有几个点 很能说明embedding的本质 以及为什么要用embedding来做矢量化 以下我对原文做了我需要的信息的摘录 需要阅读原文的请自行去google develo
  • vue方法中的方法怎么同步顺序执行_vue在一个方法执行完后执行另一个方法

    vue在一个方法执行完后执行另一个方法 用Promise来实现 Promise是ES6的新特性 用于处理异步操作逻辑 用过给Promise添加then和catch函数 处理成功和失败的情况 ES7中新提出async搭配await 建议使用a
  • java多线程测试性能,总线程使用总时间。主要用于返回主线程

    java多线程测试性能 总线程使用总时间 返回主线程的方法 转载 https www cnblogs com jack xsh p 8615644 html 返回主线程的方法 前段时间在做java多线程 然后涉及到了一个效率的问题 java