1.单线程线程池
ExecutorService executorService = Executors.newSingleThreadExecutor();
//等价于
return new FinalizableDelegatedExecutorService(new
ThreadPoolExecutor(1,1,0L,TimeUnit.MILLISECONDS,new
LinkedBlockingQueue<Runnable>())
)
2.创建固定的线程池
ExecutorService executorService = Executors.newFixedThreadPool(10);
return new ThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>());
3.创建可缓存的线程池
ExecutorService.executorService = Executors.newCachedThreadPool();
4.支持延迟执行的线程池,其使用DelayedWorkQueue实现任务延迟
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(10);
核心参数
1.corePoolSize
核心线程大小,线程池维护的最小线程大小,既没有任务处理情况下,线程池可以有多个空闲线程,类似于DBCP中的minIdle
2.maximumPoolSize
线程池最大大小,当任务数非常多时,线程池可创建的最大线程数量
3.keepAliveTime
线程池中线程的最大空闲时间,存活时间超过该时间的线程会被回收,线程池会一直缩小到corePoolSize大小
4.workQueue
线程池使用的任务缓冲队列,包括有界阻塞数组队列,有界无界链表队列,优先级队列
5.threadFactory
创建的线程工厂,可以设置线程的名字,是否是后台线程。
6.rejectedExecutionHandler
当缓冲队列满后的拒绝策略,包括Abort,Discard,DiscardOldest,CallsRun
线程池终止
Runtime.getRuntime().addShutdownHook(
new Thread(){
@Override
public void run(){
executorservice.shutdown();
executorService.awaitTermination(30,TimeUnit.SECONDS);
}
}
);