Java并发包之ThreadPoolExecutor】的更多相关文章

概述 ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务. 构造参数 corePoolSize  核心线程数.maximumPoolSize 最大线程数.keepAliveTime最大存活时间.unit时间单位.workQueue阻塞任务队列.threadFactory新建线程工厂.handler当提交任务数超过maxmumPoolSize+workQueue之和时,任务会交给R…
目录 ThreadPoolExecutor概述 线程池解决的优点 线程池处理流程 创建线程池 重要常量及字段 线程池的五种状态及转换 ThreadPoolExecutor构造参数及参数意义 Work类 void execute(Runnable command) boolean addWorker(firstTask, core) final void runWorker(Worker w) Runnable getTask() void processWorkerExit(w, complet…
接着上一篇文章今天我们来介绍下LockSupport和Java中线程的中断(interrupt). 其实除了LockSupport,Java之初就有Object对象的wait和notify方法可以实现线程的阻塞和唤醒.那么它们的区别 是什么呢? 主要的区别应该说是它们面向的对象不同.阻塞和唤醒是对于线程来说的,LockSupport的park/unpark更符合这个语义,以“线程”作为方法的参数, 语义更清晰,使用起来也更方便.而wait/notify的实现使得“线程”的阻塞/唤醒对线程本身来说…
AQS其实就是java.util.concurrent.locks.AbstractQueuedSynchronizer这个类. 阅读Java的并发包源码你会发现这个类是整个java.util.concurrent的核心之一,也可以说是阅读整个并发包源码的一个突破口. 比如读ReentrantLock的源码你会发现其核心是它的一个内部类Sync: 整个包中很多类的结构都是如此,比如Semaphore,CountDownLatch都有一个内部类Sync,而所有的Sync都是继承自AbstractQ…
      java并发包&线程池原理分析&锁的深度化 并发包 同步容器类 Vector与ArrayList区别 1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制.移动.代价比较高.因此,它适合随机查找和遍历,不适合插入和删除. 2.Vector与Arra…
Java并发包——使用新的方式创建线程 摘要:本文主要学习了如何使用Java并发包中的类创建线程. 部分内容来自以下博客: https://www.cnblogs.com/dolphin0520/p/3949310.html 使用Callable接口创建线程 Callable与Runnable 之前学习多线程的时候,使用java.lang包下的Runnable接口可以创建线程. @FunctionalInterface public interface Runnable { public abs…
Java并发包——线程池 摘要:本文主要学习了Java并发包中的线程池. 部分内容来自以下博客: https://www.cnblogs.com/dolphin0520/p/3932921.html https://blog.csdn.net/luzhen1012/article/details/79230091 https://www.cnblogs.com/wxgblogs/p/5469208.html https://blog.csdn.net/seasonLai/article/deta…
前言 前面介绍了Java并发包提供的三种线程池,它们用处各不相同,接下来介绍一些工具类,对这三种线程池的使用. Executors Executors是JDK1.5就开始存在是一个线程池工具类,它定义了用于Executor.ExecutorService.ScheduledExecutorService.ThreadFactory和Callable的工厂和工具方法.在开始之前,先了解一下它提供的一些内部类: DelegatedExecutorService.DelegatedScheduledE…
前言 这是Java并发包提供的最后一个线程池实现,也是最复杂的一个线程池.针对这一部分的代码太复杂,由于目前理解有限,只做简单介绍.通常大家说的Fork/Join框架其实就是指由ForkJoinPool作为线程池.ForkJoinTask(通常实现其三个抽象子类)为任务.ForkJoinWorkerThread作为执行任务的具体线程实体这三者构成的任务调度机制.通俗的说,ForkJoin框架的作用主要是为了实现将大型复杂任务进行递归的分解,直到任务足够小才直接执行,从而递归的返回各个足够小的任务…
前言 线程池的作用就是将线程的管理.创建.销毁等操作与线程需要执行的任务隔离开来,从而避免线程频繁的创建与销毁,以及大量的线程的上下文切换造成的资源损耗.关于Java并发包中的线程池部分,我把它们分为两部分,即线程池和Fork/Join框架. 线程池 通常线程池的时候大家都是从工具类Executors开始的,例如创建线程池,其实它内部的线程池实现才是最应该引起我们注意的.Java线程池的类结构图如下(忽略了非并发包以及静态的.私有的.Final的内部类实现): 上图画出了Java并发包中关于线程…