package a01;

public class MyRunnable implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName()+"--->"+i);
        }
    }
}
------------
package a01;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MyThreadPoolDemo1 {
    public static void main(String[] args) {
        /*
        static ExecutorService newFixedThreadPool(int nThreads)//创建有上限的线程池
        static ExecutorService newCachedThreadPool()//创建一个可以无限扩大的线程池
         */

        //1.获取对象
        ExecutorService pool1= Executors.newCachedThreadPool();

        //2.提交任务
        pool1.submit(new MyRunnable());
        pool1.submit(new MyRunnable());
        pool1.submit(new MyRunnable());
        pool1.submit(new MyRunnable());
        pool1.submit(new MyRunnable());

        //3.关闭线程池
        pool1.shutdown();
    }
}
-------------------------------------
package a01;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MyThreadPoolDemo2 {
    public static void main(String[] args) {

        //1.获取对象
        ExecutorService pool1= Executors.newFixedThreadPool(3);//指定线程个数

        //2.提交任务
        pool1.submit(new MyRunnable());
        pool1.submit(new MyRunnable());
        pool1.submit(new MyRunnable());
        pool1.submit(new MyRunnable());
        pool1.submit(new MyRunnable());
        //3.关闭线程池
        pool1.shutdown();
    }
}
-----------------------
自定义线程池:
----------------
package a02;

import a01.MyRunnable;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class MyThreadPoolDemo1 {
    public static void main(String[] args) {
        /*
        ThreadPoolExecutor threadPoolExecutor=new ThreadPoolExecutor(
                int corePoolSize,//核心线程池大小
                int maximumPoolSize,//最大线程池大小
                long keepAliveTime,//线程存活时间
                TimeUnit unit,//时间单位
                BlockingQueue<Runnable> workQueue,//阻塞队列
                ThreadFactory threadFactory,//线程工厂
                RejectedExecutionHandler handler//拒绝策略
                )
                7个参数
         */
        ThreadPoolExecutor pool=new ThreadPoolExecutor(
                3,
                6,
                60,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(3),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy()
        );
        //提交任务
        pool.submit(new MyRunnable());

        //关闭线程池
        pool.shutdown();
    }
}
----------------------------------------