摘要: Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,CompletionService,Future,Callable等。他们的关系为:并发编程的一种编程方式是把任务拆分为一些列的小任务,即Runnable,然后在提交给一个Executor执行,Executor.execute(Runnalbe)。Executor在执行时使用内部的线程池完成操作。一、创建线程池java.util.concurrent.Executors类,提供了一系列工厂方法用于创先线程池,返回的线 阅读全文
posted @ 2012-11-27 16:51 vigarbuaa 阅读(209) 评论(0) 推荐(0) 编辑
摘要: http://www.iteye.com/topic/1118660整个ThreadPoolExecutor的任务处理有4步操作:第一步,初始的poolSize < corePoolSize,提交的runnable任务,会直接做为new一个Thread的参数,立马执行第二步,当提交的任务数超过了corePoolSize,就进入了第二步操作。会将当前的runable提交到一个block queue中第三步,如果block queue是个有界队列,当队列满了之后就进入了第三步。如果poolSize < maximumPoolsize时,会尝试new 一个Thread的进行救急处理,立马 阅读全文
posted @ 2012-11-27 16:05 vigarbuaa 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 查代码时发现java中也有volatile修饰符。跟C中的功能一样Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成 阅读全文
posted @ 2012-11-27 15:21 vigarbuaa 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 以java.util.concurrent.Future为例简单说一下Future的具体工作方式。Future对象本身可以看作是一个显式的引用,一个对异步处理结果的引用。由于其异步性质,在创建之初,它所引用的对象可能还并不可用(比如尚在运算中,网络传输中或等待中)。这时,得到Future的程序流程如果并不急于使用Future所引用的对象,那么它可以做其它任何想做的事儿,当流程进行到需要Future背后引用的对象时,可能有两种情况:希望能看到这个对象可用,并完成一些相关的后续流程。如果实在不可用,也可以进入其它分支流程。处理过程中出错误,无法正常返回值,这时设一个超时对于前一种情况,可以通过调用 阅读全文
posted @ 2012-11-27 14:40 vigarbuaa 阅读(4403) 评论(1) 推荐(0) 编辑