ThreadPoolExecutor 实现固定大小线程池
1. 线程是可以有生命周期的,一般命令执行完就会自动退出
package com; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; public class MyThreadPool { public static void main(String [] args){ int num = 20; ThreadPoolExecutor pool = (ThreadPoolExecutor) Executors.newFixedThreadPool(num);; for (int i = 0 ; i<num ; i++){ int s = i; Runnable run = new Runnable() { public void run() { try { Thread.sleep(4000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; pool.execute(run); }
pool.execute(() -> System.out.println(System.currentTimeMillis()));
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
System.out.println(6);
} }
我这里是新建20个线程放入线程池 , 每个线程的功能都是等待 4秒 ,所以在4秒后 , 线程池的大小为 0
便可以执行新加入的线程
但是 , 我在后面加了新的执行 , 他会编译的时候跳过需要等待的线程 , 并不断尝试 , 直到可以执行 .
所以 , 一定要注意 , 后面 的动作要执行, 先判断前面的动作是否执行完毕
他不会阻塞后面你想要执行的