读书人

多线程运行时间计算有关问题

发布时间: 2013-01-19 11:41:36 作者: rapoo

多线程运行时间计算问题


for(int i=0,j=list.size();i<j;i++){
Thread t = new xxxThread(xx);
t.start();
}
//该如何计算第一个线程开始和最后一个线程结束;
多线程 thread java
[解决办法]
有一个简单思路。
isAlive()可以查看该线程是否结束。
可以在开始第一个线程的时候获得时间,期间循环检查是否有线程未结束,直到全部线程都结束,再次获得时间,做减法
[解决办法]
引用:
引用:
在xx类的构造方法获取开始时间,并获取for循环的j,如果j=0,获取开始时间,如果j=list.size()-1,则在构造的最后调用加入某XX构造方法

Java code?123456789public XX(int x ,int size){ if(x=0){ System.out.println(time); } ……


你把需要运行的执行体放在构造方法的中间啊,执行体不能包含多线程
[解决办法]
利用CountDownLatch这个类,countDown和await这两个方法很有用
[解决办法]
参考9楼,把你的线程在启动的时候放到指定的线程组里。
代码如下
public static void main(String[] args) {
ThreadGroup thGroup = new ThreadGroup("MyTest");

long startTs = System.currentTimeMillis();
for(int i=0;i<10;i++){
final int id = i;
Thread subThread = new Thread(thGroup, new Runnable(){
// Create a thread which will run random time 0~5 sec.
public void run() {
int myId = id;
int sec = (int) (Math.random()*5000);
try {
Thread.sleep(sec);
} catch (InterruptedException e) {
}
System.out.printf("Thread %d runed %f sec\n", myId, sec/1000.0);
}
});
subThread.start();
}
// wait all thread down.


while(thGroup.activeCount()>0){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
}
}
long endTs = System.currentTimeMillis();

System.out.printf("Total used %f sec\n", (endTs-startTs)/1000.0);
}


运行结果
Thread 6 runed 1.382000 sec
Thread 8 runed 1.655000 sec
Thread 2 runed 1.774000 sec
Thread 9 runed 1.981000 sec
Thread 0 runed 2.242000 sec
Thread 5 runed 2.640000 sec
Thread 1 runed 2.855000 sec
Thread 4 runed 2.899000 sec
Thread 3 runed 3.582000 sec
Thread 7 runed 4.184000 sec
Total used 4.224000 sec


可以看到,基本上是运行时间最长的线程结束后就得到一个时间

读书人网 >J2SE开发

热点推荐