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
相关文章推荐
- 【java多线程与并发库】---传统java多线程<3> .线程分类
- java多线程 等待多个并发事件的完成【转】
- 多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- 【Java多线程与并发库】8.java5线程并发库之线程池的应用
- java并发多线程,线程的创建启动
- Java多线程(五)——线程等待与唤醒
- java多线程与并发之java线程简介(二)
- java多线程并发(三)(中断线程)
- Java多线程与线程并发库高级应用笔记
- Java多线程系列--“基础篇”05之 线程等待与唤醒 (r)
- (13)多线程与并发库之java5阻塞队列(BlockingQueue)的应用----子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程循环100次,如此循环50次
- 【java多线程与并发库】---传统java多线程<1>线程基本概念
- 【java多线程与并发库】---传统java多线程<3> .线程分类
- JAVA中的多线程操作:线程等待、阻塞、让步
- Java多线程与并发库高级应用-java5线程并发库
- Java多线程--让主线程等待所有子线程执行完毕【转】
- JAVA多线程并发同步,以及线程终止
- Java核心知识点学习----多线程并发之线程间的通信,notify,wait
- java多线程之线程并发库的线程锁技术
- 【Java多线程与并发库】01 传统线程技术