参考书籍:

  1. 实战 Java高并发程序设计2版 : 实战Java高并发程序设计.pdf
  2. Java 高并发编程详解 多线程与架构设计
  3. Java 多线程编程实战指南
  4. Java 并发编程之美
  5. Java 并发编程的艺术
  6. Java 并发核心编程 多线程、锁、JMM、JUC、高并发设计模式 Java高并发核心编程 卷2:多线程 锁 JMM JUC 高并发设计模式@java1234.com.pdf

lQDPJxaA5lQupULNBQDNA8Cw6WjMrD5xwRoC1EFt3sBeAA_960_1280.jpg

1、目录

1、Linus Torvalds 观点:

并行计算只能在图像处理和服务器端编程两个领域使用,并且它在这两个领域确实有着大量广泛的使用。但是在其他任何地方,并行计算毫无建树!

2、唐纳德的观点:

摩尔定律本应该由硬件开发人员维持。但是,很不幸,硬件工程师似乎已经无计可施了。为了继续保持性能的高速发展,硬件工程师破天荒的想出了将多个内核塞到一个CPU里的想法。由此,并行计算就被非常自然地推广开来,随之而来的问题层出不穷,程序员的黑暗时期也随之到来。简化的硬件设计方案必然带来软件设计的复杂性。换句话说,软件工程师正在为硬件工程师无法完成的工作负责,因此也就有了唐纳德的说法。
所以,如何让多个CPU有效并且正确地工作也就成了一门技术,甚至是很大的学问。比如,多线程间如何保证线程安全,如何正确理解线程间的无序性、可见性、安全性。如何尽可能的设计并行程序。

2、必须知道的几个概念

3、CPU Cache 缓存模型

4、并发编程的三个重要特性

5、硬件 MESI 协议

5、JMM(Java Memory Model)如何保证三大特性

3.1、原子性

3.2、可见性

3.2.1、内存屏障

3.2.1.1、加载屏障

3.2.1.2、存储屏障

3.3、有序性

6、volatile关键字

7、内部锁:synchronized 关键字

8、显示锁:Lock 接口

9、CAS

10、Unsafe 类

11、伪共享