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