使用Executors创建ExecutorService对象原理简析
2017-02-28 15:33
274 查看
相信有很多同学一提到用线程池去控制线程,就有一种无从下手的感觉,大脑瞬加发麻,放心我将教大家怎么创建线程池,下面开始啦! 大家快打开as准备走起
Executors就是一个生产线程池对象的工厂,它提供了很多静态方法给大家调用,只需一个 “.” 就搞定ExecutorService对象的创建,但是当你看到它需要的形参列表时,你就会说很简单啊,有的就一个参数,直接传入线程池中线程的多少就可以了,其实这只是表面你看到的,当你点击进入看它内部实现的时候,你就会发现内部是通过ThreadPoolExecutor类来实现的,下面介绍一下这类:
大家会看见这个类的构造方法中有五个参数,第一个参数:核心线程数(在池中保留的线程数,即使它们是空闲的);第二个参数:最大线程数(池中允许的最大线程数);第三个参数:线程保活时间(当线程数大于内核数时,这是多余空闲线程在终止之前等待新任务的最大时间);第四个参数:时间单元格式(针对的是第三个参数的计量单位格式);第五个参数:工作任务队列(用于在执行任务之前保存任务的队列,此队列只保留该方法提交的任务)。
现在都知道参数对应的意义了,接下来看下一个this调用的构造函数:
这个参数列表里多了两个参数,threadFactory参数:当executor创建新线程时使用该工厂创建;handler参数:当超过队列容量与线程界限,添加任务被阻塞时,使用该handler处理添加的任务;
通过上述方法参数与执行顺序的讲解,相信大家对这个工作流程有了一定的了解,有不足之处,大家多批评指正
Executors就是一个生产线程池对象的工厂,它提供了很多静态方法给大家调用,只需一个 “.” 就搞定ExecutorService对象的创建,但是当你看到它需要的形参列表时,你就会说很简单啊,有的就一个参数,直接传入线程池中线程的多少就可以了,其实这只是表面你看到的,当你点击进入看它内部实现的时候,你就会发现内部是通过ThreadPoolExecutor类来实现的,下面介绍一下这类:
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), defaultHandler); }
大家会看见这个类的构造方法中有五个参数,第一个参数:核心线程数(在池中保留的线程数,即使它们是空闲的);第二个参数:最大线程数(池中允许的最大线程数);第三个参数:线程保活时间(当线程数大于内核数时,这是多余空闲线程在终止之前等待新任务的最大时间);第四个参数:时间单元格式(针对的是第三个参数的计量单位格式);第五个参数:工作任务队列(用于在执行任务之前保存任务的队列,此队列只保留该方法提交的任务)。
现在都知道参数对应的意义了,接下来看下一个this调用的构造函数:
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.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.workQueue = workQueue; this.keepAliveTime = unit.toNanos(keepAliveTime); this.threadFactory = threadFactory; this.handler = handler; }
这个参数列表里多了两个参数,threadFactory参数:当executor创建新线程时使用该工厂创建;handler参数:当超过队列容量与线程界限,添加任务被阻塞时,使用该handler处理添加的任务;
通过上述方法参数与执行顺序的讲解,相信大家对这个工作流程有了一定的了解,有不足之处,大家多批评指正
相关文章推荐
- java创建多线程使用Executors创造ExecutorService
- java创建多线程使用Executors创造ExecutorService
- java并发库之Executors常用的创建ExecutorService的几个方法说明
- java并发库之Executors常用的创建ExecutorService的几个方法说明
- 番外 01:Spring IoC 实现原理简析,Java的反射机制,通过类名创建对象
- Executors与ExecutorService的使用
- 番外 01:Spring IoC 实现原理简析,Java的反射机制,通过类名创建对象
- 番外 01:Spring IoC 实现原理简析,Java的反射机制,通过类名创建对象
- 番外 01:Spring IoC 实现原理简析,Java的反射机制,通过类名创建对象
- 番外 01:Spring IoC 实现原理简析,Java的反射机制,通过类名创建对象
- java并发库之Executors常用的创建ExecutorService的几个方法说明
- 在Android中使用ExecutorService、Executors、Feature
- Executors常用的创建ExecutorService的方法的简单说明
- java并发库之Executors常用的创建ExecutorService的几个方法说明
- java并发库之Executors常用的创建ExecutorService的几个方法说明
- JAVA并发库之Executors常用的创建ExecutorService的几个方法说明
- Android线程池:ExecutorService和Executors使用
- 番外 01:Spring IoC 实现原理简析,Java的反射机制,通过类名创建对象
- java并发库之Executors常用的创建ExecutorService的几个方法说明
- java并发库之Executors常用的创建ExecutorService的几个方法说明