
concurrent
文章平均质量分 85
songzi0206
这个作者很懒,什么都没留下…
展开
-
First glimpse at Java Concurrent from Executors to FutureTask
最近刚刚写完一个多线程的模块,感叹java concurrent强大的同时,整理了下近一周学习,打算大概记录下,主要是读了部分concurrent包的代码. 有了java concurrent,客户端写多线程果然简单多了,首先需要用到的类是java.util.concurrent.Executors, 由它来生成线程执行器java.util.concurrent.ExecutorS...原创 2011-10-21 18:11:44 · 154 阅读 · 0 评论 -
ThreadPoolExecutor 分析之类基础架构
既然最终任务都是由execute(Runnable)方法执行,就直接来看该方法实现的所在类。首当其冲肯定是类ThreadPoolExecutor了,相信他是java concurrent包中用的最多的一个线程池执行器,包括spring中ThreadPoolTaskExecutor也是利用它来执行任务的。从类的“家谱”来看,ThreadPoolExecutor直接继承自...原创 2011-10-25 11:25:17 · 105 阅读 · 0 评论 -
AbstractExecutorService任务提交<一>
现在可以来记录AbstractExecutorService的异步任务提交了,单刀直入吧,先看三个submit方法提交单个任务: public Future<?> submit(Runnable task) { if (task == null) throw new NullPointerException(); Runnable...原创 2011-11-02 18:08:37 · 122 阅读 · 0 评论 -
AbstractExecutorService任务提交<二>
submit方法分析完毕,接着看两个invokeAll方法,先看第一个:public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException { ...原创 2011-11-02 20:54:01 · 132 阅读 · 0 评论 -
AbstractExecutorService任务提交<三>
最后来看两个invokeAny方法,这个方法和invokeAll的区别在于,invokeAll会阻塞直到所有任务执行完(完成 or 取消 or异常)才会返回(返回的是所有任务的结果),而invokeAny只需要任何一个方法执行完即返回(返回的时候最先执行完的那个任务的结果)。查看代码发现这两个invokeAny方法都是直接调用doInvokeAny方法实现的: public &l...原创 2011-11-02 21:39:37 · 147 阅读 · 0 评论 -
ThreadPoolExecutor execute 方法分析
分析完AbstractExecutorService异步任务提交之后,一直留着一个问题:就是任务提交之后的最终执行方法execute(Runnable)始终没有细究,只知道它会在将来某个时刻去执行任务,也就是所谓的异步执行。 现在可以揭开异步执行方法executor(Runnable command)的真面目了,回到线程池执行器ThreadPoolExecutor,乍看这个方法,蛮精干...原创 2011-11-05 00:35:54 · 443 阅读 · 0 评论 -
ThreadPoolExecutor 工作线程调度和回收
ThreadPoolExecutor对任务的提交和异步执行已分析完毕,现在要补充一些关于它对线程池的管理,也就是对其工作线程的调度和回收. 还记得上一篇“ThreadPoolExecutorexecute 方法分析”最后一个关于任务异步执行的流程图,虽然分支庞杂,但只有两个条逻辑路径会增加工作线程加入到线程池:一是当前线程池的大小<核心线程池大小(即...原创 2011-11-17 18:19:05 · 1014 阅读 · 0 评论