一点点看线程池(三):线程池参数(jdk1.8)

一、线程池构造函数:

ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)

二、参数解释:

  • corePoolSize:核心线程数,默认会一直保持在线程池中,即便是空闲也会保持。除非设置了allowCoreThreadTimeOut参数,设置此参数后,超时后会被销毁。
  • maximumPoolSize:线程池中所允许的最大线程数。
  • keepAliveTime:超过核心线程数的线程,如果在此参数指定的时间内还没有接收到新任务,则会被销毁。也就是说此参数是指定超过核心线程数的空闲线程的最大存活时间。
  • unit:存活时间的单位。
  • workQueue:用来保存通过execute(Runnable command)方法提交的未执行的任务。也就是在任务执行之前用来保存任务的队列。
  • threadFactory:用来创建线程的工厂。
  • handler:饱和策略。当不能创建新线程即已经达到了可创建线程的边界(maximumPoolSize)并且用来保存任务的队列(workQueue)已满的时候执行的策略。

三、参数在四种常用线程池类型中的使用:

  • corePoolSize:

    • newFixedThreadPool:通过构造函数创建时指定。
    • newSingleThreadExecutor:默认为1.
    • newCachedThreadPool:默认为0,由程序在运行时的任务动态指定。
    • newScheduledThreadPool:通过构造函数创建时指定。
  • maximumPoolSize:

    • newFixedThreadPool:和核心线程数相等,通过构造函数创建时一起指定。
    • newSingleThreadExecutor:默认为1.
    • newCachedThreadPool:默认为Integer.MAX_VALUE。
    • newScheduledThreadPool:默认为Integer.MAX_VALUE。
  • keepAliveTime:

    • newFixedThreadPool:默认0L,代表有空闲线程时就回收。
    • newSingleThreadExecutor:默认0L,代表有空闲线程时就回收。
    • newCachedThreadPool:默认60L,代表创建的线程保存60个单位。
    • newScheduledThreadPool:默认0L,代表有空闲线程时就回收。
  • unit:

    • newFixedThreadPool:TimeUnit.MILLISECONDS(毫秒)
    • newSingleThreadExecutor:TimeUnit.MILLISECONDS(毫秒)
    • newCachedThreadPool:TimeUnit.SECONDS(秒)
    • newScheduledThreadPool:NANOSECONDS(纳秒)
  • workQueue:

    • newFixedThreadPool:new LinkedBlockingQueue():一个最大容量为Integer.MAX_VALUE的阻塞链表。
    • newSingleThreadExecutor:new LinkedBlockingQueue():一个最大容量为Integer.MAX_VALUE的阻塞链表。
    • newCachedThreadPool:new SynchronousQueue():一个非公平策略的同步队列。
    • newScheduledThreadPool:一个延迟队列。
  • threadFactory:

    • newFixedThreadPool:Executors.defaultThreadFactory()默认工厂,实际上是new DefaultThreadFactory()。
    • newSingleThreadExecutor:Executors.defaultThreadFactory()默认工厂,实际上是new DefaultThreadFactory()。
    • newCachedThreadPool:Executors.defaultThreadFactory()默认工厂,实际上是new DefaultThreadFactory()。
    • newScheduledThreadPool:Executors.defaultThreadFactory()默认工厂,实际上是new DefaultThreadFactory()。
  • handler:

    • newFixedThreadPool:new AbortPolicy()
    • newSingleThreadExecutor:new AbortPolicy()
    • newCachedThreadPool:new AbortPolicy()
    • newScheduledThreadPool:new AbortPolicy()

饱和策略有四种:
1、Abort策略:直接抛一个RejectedExecutionException异常。
2、CallerRuns策略:直接回调给线程的execute方法执行。
3、DiscardPolicy策略:直接丢弃任务。
4、DiscardOldestPolicy策略:丢弃队列头中的第一个任务。

你可能感兴趣的:(Java,线程)