您的位置:首页 > 编程语言 > Java开发

java 多线程 主线程等待 子线程序列、并发结果

2010-12-31 12:40 537 查看
package com;
import java.util.concurrent.CountDownLatch;
public class text {
//线程池
private static int threadNum = 5;
//多线程是否顺序执行
private static boolean isOrder = false;

/**
* @param args
*/
public static void main(String[] args) {
long tStart = System.currentTimeMillis();
System.out.println(Thread.currentThread().getName() + " 开始");

//初始化countDown计数器
CountDownLatch threadSignal = new CountDownLatch(threadNum);
try {
//开threadNum个线程
for (int i = 0; i < threadNum; i++) {
Thread t = new ImportThread(threadSignal);
t.start();
if(isOrder){t.join();};
}

//等待所有子线程执行完
threadSignal.await();
} catch (Exception e) {
System.out.println("Error:"+e.getMessage());
}

long tEnd = System.currentTimeMillis();
System.out.println(Thread.currentThread().getName() + " 结束");

System.out.println("总共耗时: "+ (tEnd - tStart) + "millions");
}

}


package com;
import java.util.concurrent.CountDownLatch;
public class ImportThread extends  Thread {

private CountDownLatch threadsSignal;
public ImportThread(CountDownLatch threadsSignal) {
this .threadsSignal = threadsSignal;
}

public void run() {
System.out.println(Thread.currentThread().getName() + " 开始..." );

//需要多线程做的事
textRun(Thread.currentThread().getName());

//线程结束时计数器减1
threadsSignal.countDown();
System.out.println(Thread.currentThread().getName() + " 结束... 还有"  + threadsSignal.getCount() +  " 个线程" );
}

//测试
public static void textRun(String threadName){
for(int i=0;i<100;i++){
for (int j = 1; j < 100; j++) {
System.out.println(threadName +" "+i+" "+j);
}
}
}
}


main 开始
Thread-0 开始...
Thread-0 0 1
Thread-0 0 2
Thread-1 开始...
Thread-2 开始...
Thread-0 1 1
Thread-1 0 1
Thread-2 0 1
Thread-0 1 2
Thread-1 0 2
Thread-0 2 1
Thread-2 0 2
Thread-1 1 1
Thread-2 1 1
Thread-1 1 2
Thread-2 1 2
Thread-1 2 1
Thread-0 2 2
Thread-2 2 1
Thread-1 2 2
Thread-0 结束... 还有2 个线程
Thread-2 2 2
Thread-1 结束... 还有1 个线程
Thread-2 结束... 还有0 个线程
main 结束
总共耗时: 16millions


main 开始
Thread-0 开始...
Thread-0 0 1
Thread-0 0 2
Thread-0 1 1
Thread-0 1 2
Thread-0 2 1
Thread-0 2 2
Thread-0 结束... 还有2 个线程
Thread-1 开始...
Thread-1 0 1
Thread-1 0 2
Thread-1 1 1
Thread-1 1 2
Thread-1 2 1
Thread-1 2 2
Thread-1 结束... 还有1 个线程
Thread-2 开始...
Thread-2 0 1
Thread-2 0 2
Thread-2 1 1
Thread-2 1 2
Thread-2 2 1
Thread-2 2 2
Thread-2 结束... 还有0 个线程
main 结束
总共耗时: 0millions
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: