创建线程池的两种方式
Executors.newCachedThreadPool();//静态方法
new ThreadPoolExecutor(10, 10,
60L, TimeUnit.SECONDS,
new ArrayBlockingQueue(10));//构造方法
-
使用Executors创建线程池
-
使用ExecutorService管理Executor的生命周期
-
使用future获取线程池执行结果
使用构造方法创建线程池的参数
public ThreadPoolExecutor(int corePoolSize,//核心线程数,一直存活
int maximumPoolSize,//最大线程数
long keepAliveTime,//超过核心线程数的线程的最大存活时间
TimeUnit unit,//存活时间单位
BlockingQueue<Runnable> workQueue,//等待队列,如果所有的线程都在忙碌中,新来的请求会进入等待队列
ThreadFactory threadFactory,//创建线程的工厂类,可以用来给线程提供一个更好听的名字
RejectedExecutionHandler handler//拒绝策略,默认为抛出异常
) { }
拒绝策略
1.默认,添加失败会抛出异常。
2.添加失败,会放弃。
3.添加失败,遗弃最旧的。
4.添加失败,主线程自己调用执行器中的execute方法来执行改任务。
5.自定义
常见线程池
1.newSingleThreadExecutor,只有单个线程的线程池。
2.newFixedThreadExecutor(n),固定数量的线程池。
3.newCacheThreadExecutor,线程池大小无上限,可缓存线程池,会自动回收空闲线程,等待队列可以使用synchronousQueue。
4.newScheduleThreadExecutor,支持定时和周期执行任务的线程池。




