Java多线程进阶(四四)—— J.U.C之executors框架:Fork/Join框架(2)实现

2018-11-01
阅读 25 分钟
88.8k
回顾一下,Fork/Join框架的核心实现类是ForkJoinPool线程池,其它核心组件包括:ForkJoinTask(任务)、ForkJoinWorkerThread(工作线程)、WorkQueue(任务队列)。

Java多线程进阶(四三)—— J.U.C之executors框架:Fork/Join框架(1) 原理

2018-10-23
阅读 13 分钟
92.2k
比如:对于一个规模为N的问题,若该问题可以容易地解决,则直接解决;否则将其分解为K个规模较小的子问题,这些子问题互相独立且与原问题性质相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解,这种算法设计策略叫做分治法。

Java多线程进阶(四二)—— J.U.C之executors框架:Future模式

2018-10-23
阅读 12 分钟
87.1k
Future模式是Java多线程设计模式中的一种常见模式,它的主要作用就是异步地执行任务,并在需要的时候获取结果。我们知道,一般调用一个函数,需要等待函数执行完成,调用线程才会继续往下执行,如果是一些计算密集型任务,需要等待的时间可能就会比较长。

Java多线程进阶(四一)—— J.U.C之executors框架:ScheduledThreadPoolExecutor

2018-10-13
阅读 9 分钟
87.2k
在executors框架概述一节中,我们曾经提到过一种可对任务进行延迟/周期性调度的执行器(Executor),这类Executor一般实现了ScheduledExecutorService这个接口。ScheduledExecutorService在普通执行器接口(ExecutorService)的基础上引入了Future模式,使得可以限时或周期性地调度任务。

Java多线程进阶(四十)—— J.U.C之executors框架:ThreadPoolExecutor

2018-10-10
阅读 22 分钟
88.3k
在juc-executors框架概述的章节中,我们已经简要介绍过ThreadPoolExecutor了,通过Executors工厂,用户可以创建自己需要的执行器对象。ThreadPoolExecutor,它是J.U.C在JDK1.5时提供的一种实现了ExecutorService接口的执行器,或者说线程池。

Java多线程进阶(三九)—— J.U.C之executors框架:executors框架概述

2018-10-03
阅读 16 分钟
95.2k
juc-executors框架是整个J.U.C包中类/接口关系最复杂的框架,真正理解executors框架的前提是理清楚各个模块之间的关系,高屋建瓴,从整体到局部才能透彻理解其中各个模块的功能和背后的设计思路。

Java多线程进阶(三八)—— J.U.C之collections框架:LinkedTransferQueue

2018-09-19
阅读 25 分钟
88.7k
LinkedTransferQueue是在JDK1.7时,J.U.C包新增的一种比较特殊的阻塞队列,它除了具备阻塞队列的常用功能外,还有一个比较特殊的transfer方法。

Java多线程进阶(三七)—— J.U.C之collections框架:LinkedBlockingDeque

2018-09-14
阅读 8 分钟
84.8k
LinkedBlockingDeque和ConcurrentLinkedDeque类似,都是一种双端队列的结构,只不过LinkedBlockingDeque同时也是一种阻塞队列,它是在JDK1.5时随着J.U.C包引入的,实现了BlockingDueue接口,底层基于双链表实现:

Java多线程进阶(三六)—— J.U.C之collections框架:DelayQueue

2018-09-13
阅读 9 分钟
86.6k
DelayQueue是JDK1.5时,随着J.U.C包一起引入的一种阻塞队列,它实现了BlockingQueue接口,底层基于已有的PriorityBlockingQueue实现:

Java多线程进阶(三五)—— J.U.C之collections框架:SynchronousQueue

2018-09-11
阅读 13 分钟
84.2k
SynchronousQueue是JDK1.5时,随着J.U.C包一起引入的一种阻塞队列,它实现了BlockingQueue接口,底层基于栈和队列实现:

Java多线程进阶(三四)—— J.U.C之collections框架:PriorityBlockingQueue

2018-09-11
阅读 12 分钟
84.6k
PriorityBlockingQueue,是在JDK1.5时,随着J.U.C包引入的一种阻塞队列,它实现了BlockingQueue接口,底层基于堆实现:

Java多线程进阶(三三)—— J.U.C之collections框架:LinkedBlockingQueue

2018-09-07
阅读 7 分钟
83.9k
LinkedBlockingQueue是在JDK1.5时,随着J.U.C包引入的一种阻塞队列,它实现了BlockingQueue接口,底层基于单链表实现:

Java多线程进阶(三二)—— J.U.C之collections框架:ArrayBlockingQueue

2018-09-07
阅读 5 分钟
84.3k
ArrayBlockingQueue是在JDK1.5时,随着J.U.C包引入的一种阻塞队列,它实现了BlockingQueue接口,底层基于数组实现:

Java多线程进阶(三一)—— J.U.C之collections框架:BlockingQueue接口

2018-09-06
阅读 5 分钟
86.2k
从本节开始,我们将介绍juc-collections框架中的“阻塞队列”部分。阻塞队列在实际应用中非常广泛,许多消息中间件中定义的队列,通常就是一种“阻塞队列”。

Java多线程进阶(三十)—— J.U.C之collections框架:ConcurrentLinkedDeque

2018-09-05
阅读 12 分钟
85.5k
在开始讲ConcurrentLinkedDeque之前,我们先来了解下Deque这种数据结构,我们知道Queue是一种具有FIFO特点的数据结构,元素只能在队首进行“入队”操作,在队尾进行“出队”操作。

Java多线程进阶(二九)—— J.U.C之collections框架:ConcurrentLinkedQueue

2018-09-03
阅读 9 分钟
84.8k
ConcurrentLinkedQueue是JDK1.5时随着J.U.C一起引入的一个支持并发环境的队列。从名字就可以看出来,ConcurrentLinkedQueue底层是基于链表实现的。

Java多线程进阶(二八)—— J.U.C之collections框架:CopyOnWriteArraySet

2018-08-30
阅读 3 分钟
82.9k
CopyOnWriteArraySet,是另一类适合并发环境的SET工具类,也是在JDK1.5时,随着J.U.C包一起引入的。我们之前已经介绍过了ConcurrentSkipListSet,ConcurrentSkipListSet底层基于Skip List(跳表)实现,其操作平均时间复杂度均为O(logn)。

Java多线程进阶(二七)—— J.U.C之collections框架:CopyOnWriteArrayList

2018-08-30
阅读 5 分钟
83.8k
ArrayList是一种“列表”数据机构,其底层是通过数组来实现元素的随机访问。JDK1.5之前,如果想要在并发环境下使用“列表”,一般有以下3种方式:

Java多线程进阶(二六)—— J.U.C之collections框架:ConcurrentSkipListSet

2018-08-30
阅读 3 分钟
86.3k
本文首发于一世流云专栏:[链接] 一、ConcurrentSkipListSet简介 ConcurrentSkipListSet,是JDK1.6时J.U.C新增的一个集合工具类,顾名思义,它是一种SET类型。 SET类型,在数学上称为“集合”,具有互异性、无序性的特点,也就是说SET中的任意两个元素均不相同(即不包含重复元素),且元素是无序的。 是不是感觉和HashMap...

Java多线程进阶(二五)—— J.U.C之collections框架:ConcurrentSkipListMap

2018-08-27
阅读 23 分钟
85.7k
本文首发于一世流云专栏:[链接] 一、ConcurrentSkipListMap简介 类继承结构 在正式讲ConcurrentSkipListMap之前,我们先来看下ConcurrentSkipListMap的类继承图: 我们知道,一般的Map都是无序的,也就是只能通过键的hash值进行定位。JDK为了实现有序的Map,提供了一个SortedMap接口,SortedMap提供了一些根据键范围进...

Java多线程进阶(二四)—— J.U.C之collections框架:ConcurrentHashMap(2) 扩容

2018-08-23
阅读 16 分钟
87.2k
通过上一篇文章——ConcurrentHashMap原理(1),相信读者对ConcurrentHashMap的基本原理有了一个初步认识,但是上一篇中还有一个遗留问题没有讨论到,那就是ConcurrentHashMap的扩容和数据迁移。本文中,我们将会对这两个问题进行讨论。

Java多线程进阶(二三)—— J.U.C之collections框架:ConcurrentHashMap(1) 原理

2018-08-21
阅读 39 分钟
89.6k
ConcurrentHashMap是在JDK1.5时,J.U.C引入的一个同步集合工具类,顾名思义,这是一个线程安全的HashMap。不同版本的ConcurrentHashMap,内部实现机制千差万别,本节所有的讨论基于JDK1.8。

Java多线程进阶(二二)—— J.U.C之synchronizer框架:Phaser

2018-08-12
阅读 15 分钟
90.4k
Phaser是JDK1.7开始引入的一个同步工具类,适用于一些需要分阶段的任务的处理。它的功能与 CyclicBarrier和CountDownLatch有些类似,类似于一个多阶段的栅栏,并且功能更强大,我们来比较下这三者的功能:

Java多线程进阶(二一)—— J.U.C之synchronizer框架:Exchanger

2018-08-10
阅读 14 分钟
86.5k
Exchanger有点类似于CyclicBarrier,我们知道CyclicBarrier是一个栅栏,到达栅栏的线程需要等待其它一定数量的线程到达后,才能通过栅栏。

Java多线程进阶(二十)—— J.U.C之synchronizer框架:Semaphore

2018-08-07
阅读 9 分钟
84.8k
Semaphore,又名信号量,这个类的作用有点类似于“许可证”。有时,我们因为一些原因需要控制同时访问共享资源的最大线程数量,比如出于系统性能的考虑需要限流,或者共享资源是稀缺资源,我们需要有一种办法能够协调各个线程,以保证合理的使用公共资源。

Java多线程进阶(十九)—— J.U.C之synchronizer框架:CyclicBarrier

2018-08-04
阅读 7 分钟
87.1k
这个类的功能和我们之前介绍的CountDownLatch有些类似。我们知道,CountDownLatch是一个倒数计数器,在计数器不为0时,所有调用await的线程都会等待,当计数器降为0,线程才会继续执行,且计数器一旦变为0,就不能再重置了。

Java多线程进阶(十八)—— J.U.C之synchronizer框架:CountDownLatch

2018-08-04
阅读 3 分钟
86.4k
CountDownLatch是一个辅助同步器类,用来作计数使用,它的作用有点类似于生活中的倒数计数器,先设定一个计数初始值,当计数降到0时,将会触发一些事件,如火箭的倒数计时。

Java多线程进阶(十七)—— J.U.C之atomic框架:LongAdder

2018-08-02
阅读 6 分钟
97.8k
JDK1.8时,java.util.concurrent.atomic包中提供了一个新的原子类:LongAdder。根据Oracle官方文档的介绍,LongAdder在高并发的场景下会比它的前辈————AtomicLong 具有更好的性能,代价是消耗更多的内存空间:

Java多线程进阶(十六)—— J.U.C之atomic框架:FieldUpdater

2018-08-02
阅读 5 分钟
85.5k
在java.util.concurrent.atomic包中,由三个比较特殊的原子类:AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicReferenceFieldUpdater。通过名称可以看到,这几类的功能大致相同,只是针对的类型有所不同。

Java多线程进阶(十五)—— J.U.C之atomic框架:Atomic数组

2018-08-01
阅读 2 分钟
84.8k
JDK提供了三种类型的原子数组:AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray。