线程池的基本大小,即在没有任务需要执行的时候线程池的大小并且只有在工作队列满了的情况下才会创建超出这个数量的线程。这里需要注意的是:在刚刚创建ThreadPoolExecutor的时候,线程并不会立即启动,而是要等到有任务提交时才会启动,除非调用了prestartCoreThread/prestartAllCoreThreads事先启动核心线程。再考虑到keepAliveTime和allowCoreThreadTimeOut超时参数的影响,所以没有任务需要执行的时候,线程池的大小不一定是corePoolSize。
    1、corePoolSize 线程池核心线程大小
    线程池中允许的最大线程,队列满了则会创建不超过这个大小的线程数
    2、maximumPoolSize 线程池最大线程数量

    3、keepAliveTime 空闲线程存活时间
    4、unit 线程存活时间单位
    5、workQueue 工作队列
    (1)ArrayBlockingQueue
    (2)LinkedBlockingQueue
    (3)SynchronousQueue
    新任务进来时,不会缓存,而是直接被调度执行该任务,如果没有可用线程,则创建新线程(大小为1的队列)
    (4)PriorityBlockingQueue
    具有优先级的无界阻塞队列,
    6.threadFactory 线程工厂
    创建一个新线程时使用的工厂,可以用来设定线程名、是否为daemon线程等等
    7.handler 拒绝策略

    ①CallerRunsPolicy
    该策略下,在调用者线程中直接执行被拒绝任务的run方法,除非线程池已经shutdown,则直接抛弃任务。
    ②AbortPolicy
    该策略下,直接丢弃任务,并抛出RejectedExecutionException异常。
    ③DiscardPolicy
    该策略下,直接丢弃任务,什么都不做。
    ④DiscardOldestPolicy
    该策略下,抛弃进入队列最早的那个任务,然后尝试把这次拒绝的任务放入队列