Java ThreadPoolExecutor 学习笔记_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java ThreadPoolExecutor 学习笔记

Java ThreadPoolExecutor 学习笔记

 2015/4/26 18:13:32  Vampiredx  程序员俱乐部  我要评论(0)
  • 摘要:以前常常使用JDK提供的各种并发库类编码,却很少去看源代码。写这篇文章主要还是为了强迫自己把学习Java源代码的一些要点记录下来。构造函数:ThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueue<Runnable>workQueue,ThreadFactorythreadFactory
  • 标签:笔记 学习 thread Java 学习笔记
以前常常使用JDK提供的各种并发库类编码,却很少去看源代码。写这篇文章主要还是为了强迫自己把学习Java源代码的一些要点记录下来。

构造函数
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)

参数含义:
corePoolSize 线程池里面保存的最多可以闲置的线程数量。allowCoreThreadTimeOut被调用后,则没有线程能够在timeout后还保存在线程池里
maximumPoolSize 线程池里面保存最多的线程数量
keepAliveTime,unit 当线程池里面保存的线程数量大于corePoolSize后,闲置的线程等待最大指定的时间(然后被关闭)
workQueue 用来保存被提交的任务
threadFactory 用来创建新线程的factory
handler 当所有线程都在执行任务并且workQueue已经满了,handler处理新提交进来的任务

JDK 自带的 RejectedExecutionHandler 实现有4个:AbortPolicy, CallerRunsPolicy, DiscardOldestPolicy, DiscardPolicy。
AbortPolicy 是默认策略直接 throw RejectedExecutionException
CallerRunsPolicy 当Executor没有被关闭,则直接由提交任务的线程直接运行
DiscardOldestPolicy 当Executor没有被关闭,从workQueue里面删除等待最久的一个任务,然后再调用execute
DiscardPolicy 当前任务被直接抛弃

Future submit(Callable task)
这个方法的实现在父类AbstractExecutorService里面:
1. 用Callable task去创建了FutureTask实例。FutureTask是RunnableFuture接口的实现类,即实现了Runnable接口,也实现了Future接口。
2. 用FutureTask实例调用子类execute(Runnable command),(execute方法在ThreadPoolExecutor里的实现,后续再写)
3. 把FutureTask实例返回

Future submit(Runnable task, T result)
这个方法的实现也在父类AbstractExecutorService里面:
1. 用Runnable task和result去创建了FutureTask实例(成功执行task后,返回result)。
2. 用FutureTask实例调用子类execute(Runnable command),(execute方法在ThreadPoolExecutor里的实现,后续再写)
3. 把FutureTask实例返回



上一篇: Java获取网页编码 下一篇: ADO.NET基础开发
发表评论
用户名: 匿名