java8并发编程网,GitHub标星120K+的JDK并发编程指南,连续霸榜GitHub终于开源了

前言

前面整理了一部分多线程源码的文章,看大家

正言

对于线程和 进程,我理解的就是汽车和高速公路

但是对于人脑的认知来说,“代码一行行串行”当然最容易理解。但在多线程下,多个线程的代码交叉并行,要访问互斥资源,要互相通信。作为开发者,需要仔细设计线程之间的互斥与同步,稍不留心,就会写出非线程安全的代码。正因此,多线程编程一直是一个被广泛而深入讨论的领域。

在JDK1.5发布之前,Java只在语言级别上提供一些简单的线程互斥与同步机制,也就是synchronized关键字、wait 与notify。如果遇到复杂的多线程编程场景,就需要开发者基于这些简单的机制解决复杂的线程同步问题。而从JDK 1. 5开始,并发编程大师Doug Lea奉上了一个系统而全面的并发编程框架一一JDKConcurrent包,里面包含了1各种原子操作、线程安全的容器、线程池和异步编程等内容。

本书基于JDK7和JDK8,对整个Concurrent包进行全面的源码剖析。JDK8中大部分并发功能的实现和JDK7一样,但新增了一些额外特性。例如CompletableFuture、ConcurrentHashMap的新实现、StampedLock、LongAdder等。

对整个Concurrent包的源码进行分析,有以下几个目的:

(1)帮助使用者合理地选择解决方案。Concurrent包很庞大,有各式各样的线程互斥与同步机制。明白实现原理,使用者可以根据自己的业务场景,选择最适合自己的解决方案。避免重复造轮子,也避免因为使用不当而掉到“坑”里。

(2)对源码的分析,将让使用者对内存屏障、CAS原子操作、锁、无锁等底层原理的认识,不再停留于一个“似是而非”的阶段,而是深刻地认识其本质。

(3)吸收借鉴大师的思维。在Concurrent 包中,可以看到各种巧妙的并发处理策略。看了Concurrent包,才会发现在多线程中,不是只有简陋的互斥锁、通知机制和线程池。

因为涉及内容比较多,这里就不一一展现了,我整理成了一份文档以及一份知识图谱

目 录

多线程基础

1.1线程的优雅关闭

1.2 InterruptedException ()函数与interrupt ()函数

1.3 synchronized关键字

1.4wait ()与notify ()

1.5 volatile关键字

1.6 JMM与happen-before

1.7内存屏障

1.8 final关键字

1.9综合应用:无锁编程

058d6fd0005c774533efd6a35f1e7527.png

atomic类

2.1 AtomiclInteger和AtomicLong

2.2 AtomicBoolean和AtomicReference

2.3 AtomicStampedReference和AtomicMarkableReference

2.4 AtomicIntegerFieldUpdaterAtomicLongFieldUpdater和AtomicReferenceFieldUpdater

2.5 AtomicIntegerArray、AtomicLongArray和Atomic-ReferenceArray

Lock与Condition

3.1互斥锁

3.2读写锁

3.3 Condition

3.4 StampedLock

899832cc7249d97fccb150950eab76a7.png

同步工具类

4.1 Semaphore

4.2 CountDownl atch

4.3 CyclicBarrier

4.4 Exchanger

4.5 Phaser

并发容器

5.1 BlockingQueue

5.2 BlockingDeque

5.3 CopyOnWrite

5.4 ConcurrentLinkedQueue/Deque

5.5 ConcurrentHashMap

5.6 ConcurrentSkipListMap/Set

线程池与Future

6.1线程池的实现原理

6.2线程池的类继承体系

6.3 ThreadPoolExector

6.4 Callable与Future

6.5 ScheduledThreadPoolExecutor

6.6 Executors工具类

e9dce5026db42d9c693cb3bd228803da.png

ForkJoinPool

7.1 ForkJoinPool用法

7.2核心数据结构

7.3工作窃取队列

7.4 ForkJoinPool状态控制

7.5 Worker线程的阻塞唤醒机制

7.6任务的提交过程分析

7.7工作窃取算法:任务的执行过程分析

7.8 ForkJoinTask的fork/join

7.9 ForkJoinPool的优雅关闭

CompletableFuture

8.1 CompletableFuture用法

8.2四种任务原型

8.3 CompletionStage接口

8.4 CompletableFuture内部原理

8.5任务的网状执行:有向无环图

8.6 allOf内部的计算图分析

9e969ae443fd01924c21ad0838686a81.png

内容展示

第1章多线程基础

91a773a37f0c57b31745381706d6c449.png

第2章Atomic类

53fcc2bad404cf23ed9f8d0b1dfc7ba7.png

第3章Lock与Condition

7fda248228a7eb38a1bec4822cd17551.png

第4章同步工具类

除了锁与Condition,Concurrent 包还提供了一系列同步工具类。这些同步工具类的原理,有些也是基于AQS的,有些则需要特殊的实现机制,这一章将对所有同步工具类的实现原理进行剖析。

5254b097b8f2ba8836ca9a65f7821498.png

第5章并发容器

57642cda3cba17c2977183bcad6b9762.png

第6章线程池与Future

线程池和Future我想不需要做过多的介绍,尤其是线程池,无论是面试还是工作,都是一个很重要的知识点

ec548997efa898c87a6ac488c00d7c57.png

第7章ForkJoinPool

ForkJoinPool就是JDK7提供的一种“分治算法”的多线程并行计算框架。Fork意为分叉,Join意为合并,一分一合,相互配合,形成分治算法。此外,也可以将ForkJoinPool看作一个单机版的Map/Reduce,只不过这里的并行不是多台机器并行计算,而是多个线程并行计算。

a966c7e2c81f8a8e05f2d05cdb70bd71.png

第8章CompletableFuture

在探讨Completabl eFuture的原理之前,先详细看一下CompletableFuture的用法,从这些用法中,可以看到相较之前的Future有哪些能力得到了提升。

0443c9512a3f0de066e26ccfd6b6ebf8.png

而根据这份文档,我也整理形成一张知识导图,不过还在完善中,给大家展示一下

923fb3356d471f3c7f71d9b07ad0f1d6.png

97867c2c515a907a6d126885b0814b7d.png

这份思维导图也分享给大家,大家可以根据自己的情况去有针对性的补充,同样的,需要这份思维导图的,

关注公众号:Java架构师联盟,每日更新技术好文

部分资料已经上传到我的git仓库中:有需要的可以下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值