创建线程池

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);
    }

corePoolSize:核心池的大小

maximumPoolSize:线程池最大线程数,这个参数也是一个非常重要的参数,它表示在线程池中最多能创建多少个线程;

keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止。默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作用,直到线程池中的线程数不大于corePoolSize,即当线程池中的线程数大于corePoolSize时,如果一个线程空闲的时间达到keepAliveTime,则会终止,直到线程池中的线程数不超过corePoolSize。但是如果调用了allowCoreThreadTimeOut(boolean)方法,在线程池中的线程数不大于corePoolSize时,keepAliveTime参数也会起作用,直到线程池中的线程数为0;

unit:参数keepAliveTime的时间单位,有7种取值,在TimeUnit类中有7种静态属性:

TimeUnit.DAYS;           //天
TimeUnit.HOURS;          //小时
TimeUnit.MINUTES;         //分钟
TimeUnit.SECONDS;         //秒
TimeUnit.MILLISECONDS;      //毫秒
TimeUnit.MICROSECONDS;      //微妙
TimeUnit.NANOSECONDS;      //纳秒

workQueue:一个阻塞队列,用来存储等待执行的任务,这个参数的选择也很重要,会对线程池的运行过程产生重大影响,一般来说,这里的阻塞队列有以下几种选择:

ArrayBlockingQueue;
LinkedBlockingQueue;
SynchronousQueue;
例如  BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(10); 需要指定大小
    LinkedBlockingQueue<Runnable> queue=new LinkedBlockingQueue<Runnable>();
 
public class ThreadPoolTest {
        public static void main(String[] args) {
            //BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(10);
               LinkedBlockingQueue<Runnable> queue=new LinkedBlockingQueue<Runnable>();
                ThreadPoolExecutor pool = new ThreadPoolExecutor(2, 5, 60, TimeUnit.MICROSECONDS, queue);
                
                for (int i=0; i<7; i++){
                    Runnable task = new RunnableThreadTest();
                    pool.execute(task);
                }
                
                pool.shutdown();
        }
}
 
 
原文地址:https://www.cnblogs.com/bug1024/p/9100314.html