Executor框架
Executors.newXXX即可创建线程池
固定线程池
Executors.newFixedThreadPool(int threads)
创建一个固定线程数量的线程池
public static ExecutorService newFixedThreadPool(int nThreads){
return new ThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
}
特点:
固定大小
corePoolSize和maximumPoolSize都为传进的参数
keepAliveTime为0,意味着多余线程立即停止,但其实这个值是无效的
阻塞队列用LinkedBlockingQueue,无界队列
缓存线程池
Executors.newCachedThreadPool()
public static ExecutorService newCachedThreadPool(){
return new ThreadPoolExecutor(0,Integer.MAX_VALUE,60L,TimeUnit.MILLISECONDS,new SynchronousQueue<Runnable>());}
特点:
无限扩大
比较适合处理执行时间较短的任务
线程有60s空闲就被杀死
采用SynchronousQueue装等待的任务,有任务来就必须找到工作线程处理,没有就新建
单个线程池
public static ExecutorService newSingleThreadExecutor(){
return new ThreadPoolExecutor(1,1,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
}
特点:
工作线程只有一个
使用LinkedBlockingQueue队列
确保所有任务都由一个线程执行,不需考虑同步问题
延迟或定时线程池
延迟delay时间运行,单位为unit
public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit);public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit);
延迟initialDelay时间,之后每隔period时间运行一次
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit);public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit);