Java并发学习实例
文章平均质量分 91
该系列主要是系统性的学习java并发与多线程。主要包含:Java并发的基本概念、Java内存模型、线程实现方式、线程状态转换、线程基本方法、原子类型、裸线程并发、Lock接口并发、Executor并发、ForkJoin框架并发、Actor模型并发等等。
hanchao5272
路漫漫其修远兮,吾将上下而求索。https://hanchao.blog.csdn.net/
展开
-
Java并发学习系列-绪论
最近在系统的学习Java并发(concurrent),遂将学习所得整理成博文,作为今后参考的依据。内容简述基本概念与发展历史Thread的线程方法与状态转换JMM、指令重排、happens-before原则、原子性、可见性与有序性易变类型关键字volatile同步关键字synchronized显式锁Lock原子变量Atomic线程本地变量ThreadLocal倒计时门...原创 2018-03-04 16:07:48 · 7647 阅读 · 9 评论 -
Java并发57:Akka Actors并发框架浅谈及入门示例
[超级链接:Java并发学习系列-绪论]本章对Actors并发框架进行初步的介绍和入门示例的演示,关于其更深层次的内容,以后会系统性的进行学习。1.Actors并发模型简介 Actors并发模型是计算机科学领域中的一个并行计算模型,它把actors当做通用的并行计算原语。 一个actor对接收到的消息做出响应,进行本地决策,可以创建更多的actor,或者发送更多的消息...原创 2018-04-18 23:15:04 · 2762 阅读 · 0 评论 -
Java并发56:ForkJoin并发框架的原理、2种ForkJoinTask的用法以及ForkJoinPool的常用方法
[超级链接:Java并发学习系列-绪论]本章主要对ForkJoin并发框架进行学习,主要内容分为三个部分:ForkJoin并发框架的浅谈ForkJoin并发编程的两个实例ForkJoinPool线程池的常用方法说明1.ForkJoin并发框架的浅谈1.1.Fork和JoinForkJoin并发框架:Fork=分解 + Join=合并ForkJoin并发框架是...原创 2018-04-18 00:05:53 · 3660 阅读 · 0 评论 -
Java并发55:并发集合系列-基于预占模式+链表的单向阻塞无界队列LinkedTransferQueue
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:https://blog.csdn.net/YJian2008/article/details/16951811TransferQueueTransferQueue是一个继承了BlockingQueue的接口,并且增加若干新的方法。LinkedTransferQueue是Tr...转载 2018-04-15 16:44:40 · 960 阅读 · 0 评论 -
Java并发54:并发集合系列-基于CAS算法的非阻塞无数据缓冲队列SynchronousQueue
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:https://blog.csdn.net/Dax1n/article/details/69813682介绍Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue(队列只能存储一个元素)。生产者线程对其的插入操作put必须等...转载 2018-04-15 16:05:08 · 591 阅读 · 0 评论 -
Java并发53:并发集合系列-基于独占锁+PriorityBlockingQueue实现的单向阻塞无界延时队列DelayQueue
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:http://cmsblogs.com/?p=2413DelayQueue是一个支持延时获取元素的无界阻塞队列。里面的元素全部都是“可延期”的元素,列头的元素是最先“到期”的元素。如果队列里面没有元素到期,是不能从列头获取元素的,哪怕有元素也不行。也就是说只有在延迟期到时...转载 2018-04-15 15:32:57 · 485 阅读 · 0 评论 -
Java并发52:并发集合系列-基于独占锁+二叉树最小堆实现的单向阻塞无界优先级队列PriorityBlockingQueue
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:http://www.importnew.com/25541.html一、 前言PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最高的元素,是二叉树最小堆的实现,研究过数组方式存放最小堆节点的都知道,直接遍历队列元素是无序的。二...转载 2018-04-15 14:36:23 · 638 阅读 · 0 评论 -
Java并发51:并发集合系列-基于独占锁+数组实现的单向阻塞有界队列ArrayBlockingQueue
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:http://www.importnew.com/25566.html一、 前言上节介绍了无界链表方式的阻塞队列LinkedBlockingQueue,本节来研究下有界使用数组方式实现的阻塞队列ArrayBlockingQueue二、 ArrayBlockingQue...转载 2018-04-15 14:21:54 · 580 阅读 · 0 评论 -
Java并发50:并发集合系列-基于独占锁实现的双向阻塞队列LinkedBlockingDeque
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:http://ifeve.com/concurrent-collections-3/关于与LinkedBlockingDeque类似的单向队列LinkedBlockingQueue可以参考:Java并发49使用阻塞线程安全的列表列表(list)是最基本的集合。一个列表中的...转载 2018-04-15 13:58:53 · 580 阅读 · 0 评论 -
Java并发49:并发集合系列-基于独占锁+链表实现的单向阻塞无界队列LinkedBlockingQueue
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:http://www.importnew.com/25583.html一、前言前面介绍了使用CAS实现的非阻塞队列ConcurrentLinkedQueue,下面就来介绍下使用独占锁实现的阻塞队列LinkedBlockingQueue的实现。二、 LinkedBloc...转载 2018-04-15 13:42:08 · 662 阅读 · 0 评论 -
Java并发48:并发集合系列-基于CAS算法的非阻塞双向无界队列ConcurrentLinkedDueue
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:https://www.jianshu.com/p/602b3240afafConcurrentLinkedDeque 是双向链表结构的无界并发队列,从JDK 7开始加入到J.U.C的行列中,使用CAS实现并发安全。与 ConcurrentLinkedQueue 的区别是该阻塞队...转载 2018-04-15 11:32:09 · 1594 阅读 · 0 评论 -
Java并发47:并发集合系列-基于CAS算法的非阻塞单向无界队列ConcurrentLinkedQueue
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:https://www.jianshu.com/p/9e73b9216322一、 前言常用的并发队列有阻塞队列和非阻塞队列。前者使用锁实现,后者则使用CAS非阻塞算法实现,使用非阻塞队列一般性能比较好。下面就看看常用的非阻塞ConcurrentLinkedQueue是...转载 2018-04-15 10:50:44 · 1081 阅读 · 0 评论 -
Java并发46:并发集合系列-基于锁分段技术的ConcurrentHashMap
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:http://ifeve.com/concurrenthashmap/术语定义 术语 英文 解释 哈希算法 hash algorithm 是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。 哈希表 hash ...转载 2018-04-08 23:06:07 · 1231 阅读 · 0 评论 -
Java并发45:并发集合系列-基于跳表的ConcurrentSkipListSet和ConcurrentSkipListMap
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:http://www.cnblogs.com/skywang12345/p/3498634.html 跳表相关:http://kenby.iteye.com/blog/1187303概要本章对Java.util.concurrent包中的ConcurrentSkipList...转载 2018-04-08 22:17:57 · 2779 阅读 · 0 评论 -
Java并发44:并发集合系列-基于写时复制的CopyOnWriteArrayList和CopyOnWriteArraySet
[超级链接:Java并发学习系列-绪论] [系列序章:Java并发43:并发集合系列-序章]原文地址:http://ifeve.com/java-copy-on-write/Copy-On-Write简称COW,是一种用于程序设计中的优化策略。COW的基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这...转载 2018-04-07 23:10:30 · 1179 阅读 · 0 评论 -
Java并发43:并发集合系列-序章
[超级链接:Java并发学习系列-绪论]由于私人原因,暂时没有太多时间用于并发集合类型的实例学习上面。所以从本章开始,后续并发集合类型相关文章都是转载文章,特此说明。这些转载文章的叙述角度各不相同,不过不影响我们通过这些文章对并发集合有一个初步的理解。集合编程,离不开数据结构。JDK提供了Java集合框架(Java Collections framework),它包...原创 2018-04-07 22:41:35 · 1145 阅读 · 0 评论 -
Java并发42:Executor系列--Executors(下)-几类预定义的线程池ExecutorService和可调度线程池ScheduledExecutorService
[超级链接:Java并发学习系列-绪论]本章继续学习Executors工具类。1.Executors接口概述@since 1.5这个类定义了供Executor、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable这些接口和类使用的工厂方法和工具方法。Executors来自java.util.concu...原创 2018-04-07 16:46:16 · 1206 阅读 · 0 评论 -
Java并发41:Executor系列--Executors(上)-Runnable转Callable、ThreadFactory和不可配置的线程池
[超级链接:Java并发学习系列-绪论]本章主要学习Executors接口。1.Executors接口概述@since 1.5这个类定义了供Executor、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable这些接口和类使用的工厂方法和工具方法。Executors来自java.util.concur...原创 2018-04-07 11:44:06 · 1855 阅读 · 0 评论 -
Java并发40:Executor系列--ThreadPoolExecutor和ScheduledThreadPoolExecutor学习笔记
[超级链接:Java并发学习系列-绪论]本章主要学习ThreadPoolExecutor和ScheduledThreadPoolExecutor接口。这两个类一般用于定义自定义线程池和自定义调度线程池。关于这两个接口 ,并未进行实际编程练习,只是对其源代码注释进行总结。1.ThreadPoolExecutor概述@since 1.51.1.主要参数Threa...原创 2018-04-06 18:08:40 · 1690 阅读 · 0 评论 -
Java并发39:Executor系列--ScheduleExecutorService接口学习笔记
[超级链接:Java并发学习系列-绪论]本章主要学习ScheduleExecutorService接口。1.ScheduleExecutorService接口概述@since 1.5ScheduledExecutorService继承自ExecutorService,它可以在给定延时之后调度任务,也可以以指定的周期调度任务。schedule()方法可以创建含有延时(dela...原创 2018-04-06 16:47:44 · 4384 阅读 · 0 评论 -
Java并发38:Executor系列--ExecutorService接口学习笔记
[超级链接:Java并发学习系列-绪论]本章主要学习ExecutorService接口。1.ExecutorService接口概述@since 1.5ExecutorService接口是一个执行器,它可以终止任务。ExecutorService接口还提供了返回Future接口的方法,这个方法可以用于追踪一个或多个异步任务的执行情况。ExecutorService...原创 2018-04-05 23:11:04 · 937 阅读 · 0 评论 -
Java并发37:Executor系列--Executor接口学习笔记
[超级链接:Java并发学习系列-绪论]本章主要学习Executor接口。1.Executor接口概述@since 1.5Executor,又称为执行器,它可以执行已经提交的Runnable接口类型的任务。这个接口提供了一种将任务提交从任务运行(包括在线程使用、调度等待)分离出来的方法。Executor接口通常用来显式地创建线程。例如,相较于为每一组任务调用ne...原创 2018-04-05 21:26:39 · 1200 阅读 · 0 评论 -
Java并发36:Callable+Future系列--FutureTask学习笔记
[超级链接:Java并发学习系列-绪论]本章主要学习FutureTask接口。1.FutureTask概述FutureTask类表示一个可以取消的异步计算任务。这个类提供了对Future接口的简单实现,提供了一些方法:开启计算、取消计算、查询计算是否完成和查询计算结果。只有计算完成时,才可以通过get()方法获取计算结果;如果计算没有完成,则get()方法会一致在阻塞。...原创 2018-04-05 19:59:35 · 914 阅读 · 0 评论 -
Java并发35:Callable+Future系列--Future接口学习笔记
[超级链接:Java并发学习系列-绪论]本章主要学习Future接口。1.Future接口概述Future接口代表着异步计算的结果。Future接口提供了一些方法:查看计算是否完成、等待计算完成和获取计算结果。只有在计算完成时,才能通过get()方法获取计算结果,必要时程序会阻塞直到计算完成。取消计算是通过方法cancel()执行的。此外,还提供了一些其他的方法...原创 2018-04-05 16:01:02 · 805 阅读 · 0 评论 -
Java并发34:Callable+Future系列--Callable接口学习笔记
[超级链接:Java并发学习系列-绪论]本章主要学习Callable接口。1.Callable接口概述Callable接口是一种能够返回计算结果并且可以抛出异常的任务。 Callable接口的实现类需要定义一个无参数的方法:call()。@FunctionalInterfacepublic interface Callable<V> { /** ...原创 2018-04-05 15:24:31 · 1009 阅读 · 0 评论 -
Java并发33:Semaphore基本方法与应用场景实例
[超级链接:Java并发学习系列-绪论]本章主要对Semaphore进行学习。1.Semaphore简介Semaphore,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类。所谓Semaphore即 信号量 的意思。这个叫法并不能很好地表示它的作用,更形象的说法应该是许可证管理器。其作用在JDK注释中是这样描述的: A c...原创 2018-04-01 21:18:40 · 24156 阅读 · 20 评论 -
Java并发32:CyclicBarrier的基本方法和应用场景实例
[超级链接:Java并发学习系列-绪论]本章主要对CyclicBarrier进行学习。1.CyclicBarrier简介CyclicBarrier,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类。所谓Cyclic即 循环 的意思,所谓Barrier即 屏障 的意思。所以综合起来,CyclicBarrier指的就是 循环屏障,虽然这个...原创 2018-04-01 17:17:03 · 14271 阅读 · 1 评论 -
Java并发31:CountDownLatch(下)--两种应用场景
Java并发30:CountDownLatch(上)–基本方法学习[超级链接:Java并发学习系列-绪论]本章主要对CountDownLatch的两种应用场景进行学习。有关CountDownLatch的基本方法详见上一章:《 Java并发30》1.用法概述本人所知的CountDownLatch的用法主要有以下两个方面:开关/哨子(初始count=1):所有调用它的...原创 2018-03-31 23:09:20 · 1938 阅读 · 0 评论 -
Java并发30:CountDownLatch(上)--基本方法学习
[超级链接:Java并发学习系列-绪论]本章主要对CountDownLatch的基本方法进行学习。有关CountDownLatch的应用实例详见下一章:《Java并发:31》1.CountDownLatch简介CountDownLatch,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类。所谓CountDown即 倒计时 的意思,所谓La...原创 2018-03-31 22:29:51 · 1301 阅读 · 0 评论 -
Java并发29:ThreadLocalRandom学习笔记-随机数的三种使用方法
[超级链接:Java并发学习系列-绪论]本章主要对ThreadLocalRandom进行学习。1.ThreadLocalRandom简介ThreadLocalRandom是Java提供的用于并发产生伪随机数的工具类,出现于JDK1.7版本中。ThreadLocalRandom可以看做Math.random()的并发升级类。ThreadLocalRandom不是直接用ne...原创 2018-03-25 22:32:54 · 3452 阅读 · 0 评论 -
Java并发28:ThreadLocal学习笔记-简介、基本方法及应用场景
[超级链接:Java并发学习系列-绪论]本章主要对ThreadLocal进行学习。1.初始ThreadLocalThreadLocal又称为线程本地变量、线程局部变量,来源于JDK1.2版本。简单来说,每个线程都单独存放一个ThreadLocal变量的副本,线程之间互不干扰。ThreadLocal主要区别于线程之间的共享变量。线程共享变量:多个线程共同访问这个变量...原创 2018-03-25 22:14:59 · 1112 阅读 · 0 评论 -
Java并发27:Atomic系列-原子类型累加器XxxxAdder和XxxxAccumulator的学习笔记
[超级链接:Java并发学习系列-绪论] [系列概述: Java并发22:Atomic系列-原子类型整体概述与类别划分]本章主要对原子累加器进行学习。1.原子类型累加器原子类型累加器是JDK1.8引进的并发新技术,它可以看做AtomicLong和AtomicDouble的部分加强类型。为什么叫部分呢?是因为原子类型累加器适用于数据统计,并不适用于其他粒度的应用。原子类...原创 2018-03-25 21:07:33 · 3154 阅读 · 0 评论 -
Java并发26:Atomic系列-ABA问题-带版本戳的原子引用类型AtomicStampedReference与AtomicMarkableReference
[超级链接:Java并发学习系列-绪论] [系列概述: Java并发22:Atomic系列-原子类型整体概述与类别划分]本章主要对带版本戳的原子引用类型进行学习。1.ABA问题带版本戳的原子引用类型主要是为了解决ABA问题而设计的,下面对ABA问题进行简单描述和示例。ABA问题概述:变量X的值为A.[Thread-1]准备更新变量X的值,预期值为A,准备更新为A,...原创 2018-03-25 18:54:50 · 2494 阅读 · 0 评论 -
Java并发25:Atomic系列-原子类型字段更新器AtomicXxxxFieldUpdater学习笔记
[超级链接:Java并发学习系列-绪论] [系列概述: Java并发22:Atomic系列-原子类型整体概述与类别划分]本章主要对原子类型字段更新器进行学习。1.原子类型字段更新器在java.util.concurrent.atomic中,原子类型字段更新器有以下三种:AtomicIntegerFieldUpdater:基于反射的工具类,可以原子性的更新指定对象的指定i...原创 2018-03-25 17:36:39 · 1329 阅读 · 0 评论 -
Java并发24:Atomic系列-原子类型数组AtomicXxxxArray学习笔记
[超级链接:Java并发学习系列-绪论] [系列概述: Java并发22:Atomic系列-原子类型整体概述与类别划分]本章主要对原子类型数组进行学习。1.原子类型数组在java.util.concurrent.atomic中,原子类型数组有以下三种:AtomicLongArray:提供对int[]数组元素的原子性更新操作。AtomicIntegerArray:提供对...原创 2018-03-25 15:52:42 · 2614 阅读 · 0 评论 -
Java并发23:Atomic系列-普通原子类型AtomicXxxx学习笔记
[超级链接:Java并发学习系列-绪论] [系列概述: Java并发22:Atomic系列-原子类型整体概述与类别划分]本章主要对普通原子类型进行学习。1.普通原子类型在java.util.concurrent.atomic中,普通的原子类型有以下四种:AtomicBoolean:提供对基本数据类型boolean的原子性更新操作。AtomicInteger:提供对基本...原创 2018-03-25 15:28:55 · 1117 阅读 · 0 评论 -
Java并发22:Atomic系列-原子类型整体概述与类别划分
[超级链接:Java并发学习系列-绪论]从本章开始学习原子变量:Atomic,包路径为:java.util.concurrent.atomic。本章主要对java.util.concurrent.atomic开发包下的类进行整体概述与类别划分。1.版本说明在JDK1.5版本之前,多行代码的原子性主要通过synchronized关键字进行保证。在JDK1.5版本,Java提供...原创 2018-03-25 13:59:56 · 3146 阅读 · 0 评论 -
Java并发21:Lock系列-ReadWriteLock接口和ReentrantReadWriteLock类基本方法学习实例
[超级链接:Java并发学习系列-绪论]本章主要学习读写锁。关于读写锁,在《 Java并发18》中已经学习过:synchronized关键字只提供了一种锁,即互斥锁。java.util.concurretn.locks包不仅通过Lock接口提供了与前者类似的互斥锁,而且还通过ReadWriteLock接口提供了读锁和写锁。 读写锁最大的优势在于读锁与读锁并不独占,提高了共享资...原创 2018-03-25 13:35:13 · 1656 阅读 · 0 评论 -
Java并发20:Lock系列-Condition接口基本方法学习实例
[超级链接:Java并发学习系列-绪论]Lock接口在之前的章节中多次提及,Condition接口在之前的章节中设计不多,只是下面的文章中略有提及: Java并发14:并发三特性-可见性定义、可见性问题与可见性保证技术本章主要通过解读Condition接口的源码注释,来学习Condition接口的各个方法。1.Condition接口与Lock接口在Java并发18章节,我们对...原创 2018-03-25 00:15:08 · 1249 阅读 · 0 评论 -
Java并发19:Lock系列-Lock接口基本方法学习实例
[超级链接:Java并发学习系列-绪论]Lock接口在之前的章节中多次提及:Java并发02:Java并发Concurrent技术发展简史(各版本JDK中的并发技术)Java并发12:并发三特性-原子性、可见性和有序性概述及问题示例Java并发13:并发三特性-原子性定义、原子性问题与原子性保证技术Java并发14:并发三特性-可见性定义、可见性问题与可见性保证技术Java并...原创 2018-03-24 18:53:41 · 1335 阅读 · 0 评论