
[专栏]Executor线程池源码分析
pfnie
这个作者很懒,什么都没留下…
展开
-
Java Executor并发框架(一)整体介绍
一、概述Java是天生就支持并发的语言,支持并发意味着多线程,线程的频繁创建在高并发及大数据量是非常消耗资源的,因为java提供了线程池。在jdk1.5以前的版本中,线程池的使用是及其简陋的,但是在JDK1.5后,有了很大的改善。JDK1.5之后加入了java.util.concurrent包,java.util.concurrent包的加入给予开发人员开发并发程序以及解决并发问题很大的帮原创 2016-10-08 11:57:04 · 1094 阅读 · 0 评论 -
Java Executor并发框架(十三)Executor框架线程池关于异常的处理
一、介绍关于为什么要写这篇文章,是因为我对Executor线程池的两种提交任务的方式的不同产生的好奇,我们知道,可以通过execute和submit两种方式往线程池提交我们的任务,但是这两种任务提交的方式到底有什么区别呢?通过execute方式提交的任务,我们不能获取任务执行后的返回值,而通过submit提交任务的方式,我们是可以获取任务执行结束后产生的结果。那么另一个区别就是关于异常原创 2016-10-14 21:47:57 · 3630 阅读 · 0 评论 -
Java Executor并发框架(十二)Executor框架线程池BlockingQueue的三种实现区别
一、介绍首先我们来看一下Executors工具类中创建线程池的几个方法。ExecutorService newFixedThreadPool(int nThreads):固定大小线程池。可以看到,corePoolSize和maximumPoolSize的大小是一样的(实际上,后面会介绍,如果使用无界queue的话maximumPoolSize参数是没有意原创 2016-10-10 21:37:36 · 911 阅读 · 0 评论 -
Java Executor并发框架(十一)Executor框架线程池生命周期
一、介绍我们知道线程是有多种执行状态的,同样管理线程的线程池也有多种状态。JVM会在所有线程(非后台daemon线程)全部终止后才退出,为了节省资源和有效释放资源关闭一个线程池就显得很重要。有时候无法正确的关闭线程池,将会阻止JVM的结束。线程池Executor是异步的执行任务,因此任何时刻不能够直接获取提交的任务的状态。这些任务有可能已经完成,也有可能正在执行或者还在原创 2016-10-09 17:53:41 · 542 阅读 · 0 评论 -
Java Executor并发框架(十)Executor框架线程池源码解析
一、介绍Executors 是 Executor、ExecutorService、ThreadFactory、Callable 类的工厂和工具方法。二、源码解析创建一个固定大小的线程池:通过重用共享无界队列里的线程来减少线程创建的开销。当所有的线程都在执行任务,新增的任务将会在队列中等待,直到一个线程空闲。由于在执行前失败导致的线程中断,如果需要继续执行接下去的原创 2016-10-09 17:32:32 · 620 阅读 · 0 评论 -
Java Executor并发框架(九)Executor框架线程池ExecutorService.shutdown什么时候执行
一、介绍主线程和线程池之间没有直接关系,线程池使用自己的线程。生命周期也相互独立。shutdown()可以理解为:主线程要求线程池关闭,但不会为此等待线程池执行完毕。 shutdown() 作为函数,当然是立即执行,也即是不再接受新任务了;但是它既不会强行终止正在执行的任务,也不会取消已经提交的任务。也就是说之前提交的5个任务,原创 2016-10-09 17:04:56 · 2609 阅读 · 0 评论 -
Java Executor并发框架(八)Executor框架线程池ThreadPoolExecutor、ScheduledThreadPoolExecutor
一、介绍Java中的线程池类有两个,分别是:ThreadPoolExecutor和ScheduledThreadPoolExecutor,这两个类都继承自ExecutorService。利用这两个类,可以创建各种不同的Java线程池,为了方便我们创建线程池,Java API提供了Executors工厂类来帮助我们创建各种各样的线程池。下面我们分别介绍一下这三个类。Java线程池原创 2016-10-09 16:57:25 · 596 阅读 · 0 评论 -
Java Executor并发框架(七)Executor框架线程池任务执行全过程(下)
一、介绍基于Executor接口中将任务提交和任务执行解耦的设计,ExecutorService和其各种功能强大的实现类提供了非常简便方式来提交任务并获取任务执行结果,封装了任务执行的全部过程。本文尝试通过对该部分源码的解析以ThreadPoolExecutor为例来追踪任务提交、执行、获取执行结果的整个过程。为了避免陷入枯燥的源码解释,将该过程和过程中涉及的角色与我们工作中的场景和场景中原创 2016-10-09 09:58:09 · 712 阅读 · 0 评论 -
Java Executor并发框架(六)Executor框架线程池任务执行全过程(上)
一、介绍基于Executor接口中将任务提交和任务执行解耦的设计,ExecutorService和其各种功能强大的实现类提供了非常简便方式来提交任务并获取任务执行结果,封装了任务执行的全部过程。本文尝试通过对该部分源码的解析以ThreadPoolExecutor为例来追踪任务提交、执行、获取执行结果的整个过程。为了避免陷入枯燥的源码解释,将该过程和过程中涉及的角色与我们工作中的场景和场景中原创 2016-10-08 20:14:53 · 1375 阅读 · 0 评论 -
Java Executor并发框架(五)ExecutorService
一、介绍Executor的实现通常都会创建线程来执行任务,但是使用异步方式来执行任务时,由于之前提交任务的状态不是立即可见的,所以如果要关闭应用程序时,就需要将受影响的任务状态反馈给应用程序。为了解决执行服务的生命周期问题,ExecutorService扩展了Executor接口,添加了一些用于生命周期管理的方法。如下:public interface ExecutorService原创 2016-10-08 17:09:12 · 646 阅读 · 0 评论 -
Java Executor并发框架(四)创建线程池的核心参数的解释
一、ThreadPoolExecutor的相关属性private final BlockingQueue workQueue; // 任务阻塞队列private final ReentrantLock mainLock = new ReentrantLock(); // 互斥锁private final HashSet workers = new Hash原创 2016-10-08 16:44:25 · 8742 阅读 · 1 评论 -
Java Executor并发框架(三)ThreadFactory介绍
一、介绍使用 ThreadFactory 创建新线程。如果没有另外说明,则在同一个 ThreadGroup 中一律使用 Executors.defaultThreadFactory() 创建线程,并且这些线程具有相同的 NORM_PRIORITY 优先级和非守护进程状态。通过提供不同的 ThreadFactory,可以改变线程的名称、线程组、优先级、守护进程状态等等。如果从 new原创 2016-10-08 15:20:36 · 1857 阅读 · 0 评论 -
Java Executor并发框架(二)RejectedExecutionHandler介绍
一、介绍当Executor已经关闭(即执行了executorService.shutdown()方法后),并且Executor将有限边界用于最大线程数量和工作队列容量,且已经饱和时,在方法execute()中提交的新任务将被拒绝。在以上述情况下,execute 方法将调用其 RejectedExecutionHandler 的 RejectedExecutionHandler.原创 2016-10-08 14:18:03 · 17274 阅读 · 0 评论 -
Java Executor并发框架(十四)Executor框架线程池使用原始方式实现生产者消费者模式
一、介绍 在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。。举个例子,如果你的Java程序中有两个线程——即生产者和消费者,那么生产者可以通知消费者,让消费者开始消耗数据,因为队列缓 冲区中有内容待消费(不为空)。相应的,消费者可以通知生产者可以开始生成更多的数据,因为当它消耗掉某些数据后缓冲区不再为满。 wai原创 2016-10-18 22:20:43 · 2931 阅读 · 0 评论