ThreadPoolExecutor
ThreadPoolExecutor使用:
public ThreadPoolExecutor(int corePoolSize,//核心线程数
int maximumPoolSize,//最大线程数
long keepAliveTime,//最大空闲时间
TimeUnit unit,//时间单位
BlockingQueue<Runnable> workQueue//任务队列
RejectedExecutionHandler handler//饱和处理机制
) {
}
ExecutorService
ExecutorService接口是java内置的线程池接口,接口中的方法:
- void shutdown() 启动一次顺序关闭,执行以前提交的任务,但不接受新的任务
- List shutdownNow() 停止所有正在执行的任务,暂停处理正在等待的任务,并返回等待执行的任务列表
- Future submit(Callable task)执行带返回值的任务,返回一个Future对象
- Future<?> submit(Runnable task) 执行Runnable任务,并返回一个标识该任务的Future
- Future submit(Runnable task,T result) 执行Runnable任务,并返回一个表示该任务的Future.
Executors创建非延迟线程池
创建线程工厂
此时线程池所有线程名字由工厂加工输出名字
class ThreadsFactory implements ThreadFactory{
private String name;
public ThreadsFactory(String name) {
this.name = name;
}
@Override
public Thread newThread(Runnable r) {
return new Thread(r,name);
}
}
创建线程池的几种方法
使用Executors里面的静态方法获取Executor Service
- newCachedThreadPool()创建一个默认的线程对象,线程可重复使用,且在第一次使用时才创建
- newCachedThreadPOol(ThreadFactory tf)线程池中的所有线程都用ThreadFactory来创建,这样的线程无需手动启动,自行执行。
- newFixedThreadPool(int n) 创建一个可以重复使用固定线程数的线程池
- newFixedThreadPool(int n,ThreadFactory tf)创建一个可以重复使用固定线程数的线程池,并通过Thread Factory进行线程创建
- newSingleThreadExecutor()创建一个使用单个worker线程的Executor,以无界队列方式来运行该线程
- newSingleThreadExecutor(ThreadFactory tf),创建一个使用单个worker线程的Executor,且线程池中的所有线程都使用ThreadFactory实现
Executors创建 延迟线程池
- newScheduledThreadPool(int carePoolSize)创建一个可重用固定线程数的线程池且允许延迟执行或定期执行任务
- newScheduledThreadPool(int carePoolSize,ThreadFactory tf)创建一个可重用固定线程数的线程池且线程池中所有线程通过线程工厂来创建,且允许延迟运行或定期执行任务
- newSingleThreadScheduleExecutor()创建一个单线程执行程序,它允许在给定延迟后运行命令或者定期地执行
- newSingleThreadScheduleExecutor(ThreadFactory tf)创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行
延迟线程池常用方法
- ScheduleFuture schedule(Callable callable,long delay,TimeUnit unit)延迟时间单位是unit,数量时delay的时间后执行callable.(不进行重复)
- ScheduledFuture<?> schedule(Runnable command,long delay,TimeUnit unit)延迟时间单位时unit,数量是delay的时间后执行command.(不进行重复)
- SchduledFuture<?> scheduleAtFixedRate(Runnable command,long initialDelay,long period,TimeUnit unit)延迟时间单位是Unit,数量是initialDelay的时间后,每间隔period时间重复执行一次command(当任务开始时就开始计算间隔时间)
- ScheduledFuture<?>scheduleWithFixedDelay(Runnable command,long intialDealy,long delay,TimeUnit unit)创建并执行一个在给定初始线程延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟(当任务结束时开始计算间隔时间)