线程池工厂类
Posted 一朵花花
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池工厂类相关的知识,希望对你有一定的参考价值。
前言: Java提供的 Executor 都在JUC (java.util.concurrent) 包下面,主要包括:线程池工厂类Executors,线程池实现类ThreadPoolExecutor等
线程池 ThreadPoolExecutor 通常都是通过 Executors 来创建的
// 返回一个可根据实际情况调整线程个数的线程池
Executors.newCachedThreadPool();
// 创建一个固定数量的线程池
Executors.newFixedThreadPool(10);
// 创建一个线程数量为1的线程池
Executors.newSingleThreadExecutor();
// 返回一个ScheduledExecutorService对象
//该对象也是调用父类的线程池方法,类似newFixedThreadPool
Executors.newScheduledThreadPool(5);
Executors.newCachedThreadPool( )
创建一个数目无上限,但是线程不会轻易销毁的线程池
初始情况下,线程池里没有线程,随着注册任务进去,就会创建一些线程来处理任务,任务完成之后,线程不会立刻销毁,而是仍然存在等待执行新的任务
若有任务则没线程时则创建线程,每个线程空闲等待时间为60秒,60秒后如果该线程没有任务可执行,则被回收;(核心线程数量为0,最大线程数量为最大,空闲等待时间为60s)
源码:
public static ExecutorService newCachedThreadPool()
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory)
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>(),
threadFactory);
Executors.newFixedThreadPool(10)
创建一个固定大小的线程池 (线程数目是固定的),不管任务再怎么多,线程数目也不会新增,任务就会在阻塞队列中排队 (工作中最主要使用的线程池)
当有任务提交时,若线程池中有空闲线程,则立即执行,若没有,则会被缓存在一个任务队列中等待有空闲的线程再去执行;(核心线程数等于最大线程数,默认空闲时间为0,空闲立马销毁)
源码:
public static ExecutorService newFixedThreadPool(int nThreads)
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory)
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(),
threadFactory);
Executors.newSingleThreadExecutor( )
创建一个线程数量为1的线程池
若空闲则执行,否则入队列等待被执行;(核心线程数量为1,最大线程数量也为1,空闲等待时间为0)
源码:
该方法有2个实现,一个带自定义的线程工厂,一个不带
public static ExecutorService newSingleThreadExecutor()
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()));
public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory)
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(),
threadFactory));
Executors.newScheduledThreadPool(5)
和定时器的效果类似
源码:
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
return new ScheduledThreadPoolExecutor(corePoolSize);
以上是关于线程池工厂类的主要内容,如果未能解决你的问题,请参考以下文章
Java线程池类ThreadPoolExecutorScheduledThreadPoolExecutor及Executors工厂类