阿里巴巴规范:
三大方法:
public static void main(String[] args) {
ExecutorService pool = null;
try {
//得到单一线程池
// pool = Executors.newSingleThreadExecutor();
//固定大小的线程池
// pool= Executors.newFixedThreadPool(5);
//可伸缩的线程池
pool = Executors.newCachedThreadPool();
for (int i= 0;i<1000;i++){
pool.execute(()->{
System.out.println(Thread.currentThread().getName());
});
}
} finally {
//线程用完要关闭
pool.shutdown();
}
}
7大参数:
源码
public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(),
threadFactory);
}
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,//21亿
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
本质其实是调用ThreadPoolExecutor 方法
//这就是七大参数
public ThreadPoolExecutor(int corePoolSize,//核心线程大小
int maximumPoolSize,//最大线程大小
long keepAliveTime,//存活时间,超时了没有人调用就会释放
TimeUnit unit,//超时单位
BlockingQueue<Runnable> workQueue,//阻塞队列
ThreadFactory threadFactory,//线程工程,一般不动
RejectedExecutionHandler handler//拒绝策略
) {
if (corePoolSize < 0 ||
maximumPoolSize <= 0 ||
maximumPoolSize < corePoolSize ||
keepAliveTime < 0)
throw new IllegalArgumentException();
if (workQueue == null || threadFactory == null || handler == null)
throw new NullPointerException();
this.acc = System.getSecurityManager() == null ?
null :
AccessController.getContext();
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.workQueue = workQueue;
this.keepAliveTime = unit.toNanos(keepAliveTime);
this.threadFactory = threadFactory;
this.handler = handler;
}
四大拒绝策略
拒绝策略1: 由调用线程处理该任务【CallerRunsPolicy】打印结果:
拒绝策略2: 丢弃任务 并抛出RejectedExecutionException异常 【 默认 AbortPolicy 】打印结果:
拒绝策略 3 : 丢弃任务,但是不抛出异常【DiscardPolicy】打印结果:
拒绝策略 4 : 丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)【DiscardOldestPolicy】打印结果: