java 实例化耗时,[Java教程][Java] 统计从创建到结束所有线程消耗的总时间

[Java教程][Java] 统计从创建到结束所有线程消耗的总时间

0 2013-12-06 01:00:06

Java Codepublic class CreateThread extends Thread{ // define constructors public CreateThread() {} @Override public void run() { try {

// 每个线程睡眠5秒 Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) throws InterruptedException { long begin = System.currentTimeMillis(); for (int i = 0; i < 1000; i++) { Thread thread = new CreateThread(); thread.start(); System.out.println("activeCount : " + Thread.activeCount()); } System.out.println("activeCountMain1 : " + Thread.activeCount());// 每一个进程都有一个主线程,Java里面通常都指的是main方法// Thread.activeCount() == 1 时只有main线程在运行,其他的都结束或者挂起或者撤销了// 把while这段代码注释掉之后再运行一次 while (true) { if ( Thread.activeCount() == 1 ) break; }

System.out.println("activeCountMain2 : " + Thread.activeCount()); long end = System.currentTimeMillis(); System.out.println("Total Time: " + (end - begin) + " ms"); } // End function main()}

运行结果

结果一:没注释while{}那段代码

... ...

activeCount : 997

activeCount : 998

activeCount : 999

activeCount : 1000

activeCount : 1001

activeCountMain1 : 1001    // 程序会在这里停一段时间,再往下打印信息

activeCountMain2 : 1

Total Time: 5225 ms

分析

创建线程是很快的,所以每个线程之间的开始和结束间隔都很短;

而每个线程都需 要睡眠5秒钟,所以这里所消耗的总时间为5秒多一点。

结果二:注释掉while{}那段代码再运行

... ...

activeCount : 997

activeCount : 998

activeCount : 999

activeCount : 1000

activeCount : 1001

activeCountMain1 : 1001

activeCountMain2 : 1001

Total Time: 184 ms

分析

程序几乎是直接就执行到最后,但是main方法还没结束,需要等一段时间后才结束。

这样只能得到创建所有线程所消耗的时间。

总结

总时间 = 创建线程时间 + 等待所有线程睡眠结束时间

其他方案

1、把时间统计放在@Override的run()方法里面

这样只能统计单独统计每一个线程所消耗的时间,创建线程的时间被忽略掉(当然忽略掉也没所谓,因为太短了)。

但是还有一个很重要的问题:难以统计线程消耗的总时间。可以把时间输入到一个临时文件,然后再统计,

不过太麻烦了,效率低。有人会用线程通信来统计,这样可能要写一大段的代码,估计也效率不咋的。

2、把创建的线程放进一个List,然后使用遍历List的时候给每一个线程加上一个join(),等待每一个线程结束

这样的方法把多线程变成顺序执行了,是单线程了。

本文网址:http://www.shaoqun.com/a/77620.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

JAVA

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值