1 package com.company; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.concurrent.CountDownLatch; 6 import java.util.concurrent.ExecutorService; 7 import java.util.concurrent.Executors; 8 9 public class Main { 10 11 public static void main(String[] args) { 12 // write your code here 13 System.out.println("Hello World"); 14 int TOTAL_THREADS = 4;//线程数 15 //数据库中的100条数据; 16 List list = new ArrayList(); 17 for (int i = 0; i < 100; i++) { 18 list.add(i); 19 } 20 //Executors创建线程池new固定的10个线程 21 ExecutorService taskExecutor = Executors.newCachedThreadPool(); 22 final CountDownLatch latch = new CountDownLatch(list.size());//用于判断所有的线程是否结束 23 System.out.println("个数==" + list.size()); 24 25 for (int m = 0; m < list.size(); m++) { 26 final int n = m;//内部类里m不能直接用,所以赋值给n 27 Runnable run = new Runnable() { 28 public void run() { 29 try { 30 System.out.println("我在执行=" + n); 31 } finally { 32 latch.countDown(); //每次调用CountDown(),计数减1 33 } 34 } 35 }; 36 taskExecutor.execute(run);//开启线程执行池中的任务。还有一个方法submit也可以做到,它的功能是提交指定的任务去执行并且返回Future对象,即执行的结果 37 } 38 39 try { 40 //等待所有线程执行完毕 41 latch.await();//主程序执行到await()函数会阻塞等待线程的执行,直到计数为0 42 } catch (InterruptedException e) { 43 e.printStackTrace(); 44 } 45 taskExecutor.shutdown();//关闭线程池 46 //所有线程执行完毕,执行主线程 47 } 48 49 }