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

便可以执行新加入的线程

但是 , 我在后面加了新的执行 , 他会编译的时候跳过需要等待的线程 , 并不断尝试 , 直到可以执行 .

所以 , 一定要注意 , 后面 的动作要执行, 先判断前面的动作是否执行完毕

他不会阻塞后面你想要执行的

posted @ 2020-06-15 02:55  挪威森林猫Zzz  阅读(1399)  评论(0编辑  收藏  举报