这系列的读书笔记写了什么

image-20200430213015880

主体学习材料:极客时间课程 —— 《Java 并发编程实战》。

其他内容:

  • 个人对于知识的整合:包括在这系列课程,可能会引用别的地方的并发资料,看看不同的人对相同的知识点的不同的见解。(推荐 并发编程网)
  • 可运行的代码范例:其实这门课还算不错了,代码大部分是可运行的,后期伪代码多一些,《JCIP》这本书基本都是说明代码,如果能配套真正可运行的案例,这书目前8-9分,我愿意给100昏。
  • 重制的示意图:作者配了很多不错的示意图,我会重新绘制一遍,大体框架不会做改动,但是可能会加一些个人说明,自己理解一遍的同时也帮助别人理解。
  • 涉及到的并发容器源码的阅读:并发知识不可避免的会涉及到并发容器,这部分如果不看源码很快你就会被相当多的并发容器给绕晕了,先总结其特性从高层次了解其机制,后洞察其细节,从低层次了解其实现,这样的话我觉得学习效果最好,而受篇幅所限,这部分内容作者是没有具体讲解的,那就由我补上。
  • 课程留言: 我认为其二有价值的地方,底下的留言可以启发你的思考。
  • 个人的评注以及我有疑惑但是作者没有细讲的地方:也算是知识的迁移,每篇会整理出QA,把我认为我有疑惑的地方自己去弄明白。
  • 最最最主要的为了我个人的学习,写读书笔记几个月了,对于知识的学习,梳理,复习,运用真的非常有用,所以才能一直检查下来做这件事。

我对于这门课的评价:截止到今天 2020-08-24 ,已经把这门课的主体内容学完了,速度挺慢的,基本按照一天1篇的进度在走,首先看课程的结构,作者将他要描述的并发知识分为了3个模块:

  • 第一部分——基础并发知识
  • 第二部分——并发工具类
  • 第三部分——并发设计模式

这种分层挺清晰的,所以不仅能学到专业知识,也可以借鉴作者的写作结构。

其次,我认为这门课最有价值的点在于:能够用比较好理解的方式去阐述复杂的并发知识。有利有弊,弊端就在于其内容的深度肯定是不及**《JCIP Java 并发编程实战》**这本书的。但是我觉得这门课用来入门,或者对照着经典书籍学习,效果很不错。

曾经对于并发是持有一种畏惧态度的,因为工作中一直没怎么接触过,之前的学习也是零散的,不成体系。今年以来开始构建自己的知识体系结构,坚持到现在,收获已经很多了。

首先是你会发现:底层知识虽然难,但是很多点都是相通的。学明白了一个,见到另一个的时候或多或少都会有些联系,这时候如果能做到知识的迁移,将新老知识联系在一起,你会发现知识是越学越少的,这可能就是把书读薄吧。

其次,构建成体系知识的最好方法就是看书,其中精华我认为在序言和目录,最近的学习过程也是提升阅读能力的过程,从线性阅读:从前到后的遍历 到 模块化阅读:将一本书拆成一个个模块,只看自己要学的模块,对比多本书对同一个知识的讲解,从而更深入的学习,个人觉得这是最大的收获 —— 提升了学习能力。

目前已完成的章节:

第一部分:并发理论基础

这部分主要就是介绍并发知识的基础:从并发的由来,并发问题的根子出在哪里,上到高级编程语言的编译器,下到CPU与CPU缓存,以及Java对于并发问题做出的应对,提供了什么工具帮助你解决问题,不同工具之间的适用场景,以及它们的利弊在哪里

  • 01 | 可见性、原子性和有序性问题:并发编程Bug的源头

  • 02 | 内存模型:Java如何解决可见性和有序性问题

  • 03|互斥锁解决原子性问题

  • 04|互斥锁(下)如何用一把锁保护多个资源

  • {% post_link 读书笔记/极客时间/Java并发编程实战/第一部分—基础/03|互斥锁解决原子性问题 03 | 互斥锁 解决原子性问题 %}

  • {% post_link 读书笔记/极客时间/Java并发编程实战/第一部分—基础/04|互斥锁(下)如何用一把锁保护多个资源 04 | 互斥锁(下)如何用一把锁保护多个资源 %}

  • {% post_link 读书笔记/极客时间/Java并发编程实战/第一部分—基础/05|死锁 05 | 一不小心就死锁了,怎么办? %}

  • {% post_link 读书笔记/极客时间/Java并发编程实战/第一部分—基础/06|等待通知 06 | 用等待——通知机制优化循环等待 %}

  • {% post_link 读书笔记/极客时间/Java并发编程实战/第一部分—基础/07|安全性、活跃性、性能 07 | 安全性、活跃性、性能 %}

  • {% post_link 读书笔记/极客时间/Java并发编程实战/第一部分—基础/08|管程 08 | 管程:并发编程的万能钥匙 %}

  • {% post_link 读书笔记/极客时间/Java并发编程实战/第一部分—基础/09|线程生命周期 09 | 线程生命周期 %}

  • {% post_link 读书笔记/极客时间/Java并发编程实战/第一部分—基础/10|创建多少线程合适 10 | 创建多少线程合适 %}

第二部分:并发工具类

很实际的工具介绍,配合源码,自己看看源码实现,看看注释,写几个Demo,食用风味更佳

  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/14|Lock和Condition 14 | Lock和Condition %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/15|Dubbo如何使用管程 15 | Dubbo如何使用管程 %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/16|Semaphore 16 | Semaphore %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/17|ReadWriteLock 17 | ReadWriteLock %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/18|StampedLock 18 | StampedLock %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/19|CountDOwnLatch 19 | CountDownLatch %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/20|并发容器 20 | 并发容器 %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/21|原子类 21 | 原子类 %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/22|Executor线程池 22 | Executor线程池 %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/23|Future 23 | Future %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/24|CompletableFuture 24 | CompletableFuture:异步编程没那么难 %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第二部分—并发工具类/25|CompletionService 25 | CompletionService:如何批量执行异步任务 %}

第三部分:并发设计模式

解决并发问题的方法已经被总结成了稳定可靠的套路,这里的设计模式和GOF的设计模式还不太一样,更多的是指问题的通解模型

  • {% post_link 读书笔记/极客时间/Java并发编程实战/第三部分—并发设计模式/28|Immutablity模式 28 | Immutability模式:如何利用不变性解决并发问题 %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第三部分—并发设计模式/29|CopyOnWrite 29 | Copy-On-Write模式:不是延迟策略的COW %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第三部分—并发设计模式/30线程本地存储 30 | 线程本地存储模式:没有共享就没有伤害%}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第三部分—并发设计模式/31|GuardedSuspension 31 | Guarded Suspension模式:等待唤醒机制的规范实现 %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第三部分—并发设计模式/32|Balking 32 | Balking模式:再谈线程安全的单例模式 %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第三部分—并发设计模式/33|Thread-Per-Message 33 | Thread-Per-Message模式:最简单实用的分工方法 %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第三部分—并发设计模式/34|Worker-Thread 34 | Worker Thread模式:如何避免重复创建线程 %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第三部分—并发设计模式/35|两阶段终止 35 | 两阶段终止模式:如何优雅地终止线程 %}
  • {% post_link 读书笔记/极客时间/Java并发编程实战/第三部分—并发设计模式/36|生产者—消费者模式 36 | 生产者——消费者模式:用流水线思想提高效率 %}

待完成章节:↓

第四部分:案例分析

  •  38 | 案例分析(一):高性能限流器 Guava RateLimiter
  •  39 | 案例分析(二):高性能网络应用框架 Netty
  •  40 | 案例分析(三):高性能队列 Disruptor
  •  41 | 案例分析(四):高性能数据库连接池 HikariCP

第五部分:其他并发模型

  •  42 | Actor模型:面向对象原生的并发模型
  •  43 | 软件事务内存:借鉴数据库的并发经验
  •  44 | 协程:更轻量级的线程
  •  45 | CSP模型:Golang的主力成员

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

最是人间留不住,曾是惊鸿照影来。