在java.util.concurrent
包中Executors
类中,线程池的工厂类,用来生产线程池
newFixedThreadPool(int nThreads, ThreadFactory threadFactory)
使用步骤
- 使用线程池的工厂类
Executors
里面提供的静态方法newFixedThreadPool()
生产一个线程池
解析:
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
//解析 调用submit方法,执行的是父类AbstractExecutorService(实现了interface ExecutorService extends Executor)
的submit方法
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Void> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
这个execute方法时顶级接口Executor中的方法,ThreadPoolExecutor复写了这个方法,执行自己的
该方法的主要内容:
1. 当新的任务到来,如果工作线程数小于核心线程数,则添加新的线程
2. 工作线程数大于等于核心线程数,则将任务放入缓存任务队列
3. 任务入队失败,说明任务缓存任务队列已满,尝试添加新的线程处理,如果添加失败则以某种方式拒绝任务
- 创建一个类,是吸纳
Runnable
接口,并重写run
方法,编写线程要执行的任务 - 调用
ExecutorService
(该接口继承Executor
)的submit
,线程任务作为参数传递,返回一个Future
,成功完成是,Future
的get
方法会返回null
-
ExecutorService
的shutdown
可以销毁线程池
网友评论