
Java并发编程的艺术笔记
Java并发编程的艺术笔记
孤丨焰
萌新一枚
展开
-
【读书笔记】《Java并发编程的艺术》Java内存模型——happens-before
一、JMM的设计从JMM设计者的角度,在设计JMM时,需要考虑两个关键因素:程序员对内存模型的使用。程序员希望内存模型易于理解、易于编程。程序员希望基于一个强内存模型来编写代码。编译器和处理器对内存模型的实现。编译器和处理器希望内存模型对它们的束缚越少越好,这样它们就可以做尽可能多的优化来提高性能。编译器和处理器希望实现一个弱内存模型。由于这两个因素互相矛盾,所以JSR-133专家组在设计JMM时的核心目标就是找到一个好的平衡点:一方面,要为程序员提供足够强的内存可见性保证;另一方面,对编译器和原创 2020-08-30 11:50:36 · 194 阅读 · 0 评论 -
【读书笔记】《Java并发编程的艺术》Java内存模型——final域的内存语义
一、final域的重排序规则原创 2020-08-28 21:39:40 · 268 阅读 · 0 评论 -
【读书笔记】《Java并发编程的艺术》Java内存模型——锁的内存语义
锁的释放-获取建立的happens-before关系原创 2020-08-28 14:11:03 · 160 阅读 · 0 评论 -
【读书笔记】《Java并发编程的艺术》Java内存模型——volatile的内存语义
一、volatile的特性理解volatile特性的一个好方法是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面通过具体的示例来说明,示例代码如下:class VolatileFeaturesExample { volatile long vl = 0L; // 使用volatile声明64位的long型变量 public void set(long l) { vl = l; // 单个volatile变量的写 } public void原创 2020-08-27 20:58:52 · 222 阅读 · 0 评论 -
【读书笔记】《Java并发编程的艺术》Java内存模型——顺序一致性
顺序一致性内存模型是一个理论参考模型,在设计的时候,处理器的内存模型和编程语言的内存模型都会以顺序一致性内存模型作为参照。一、数据竞争与顺序一致性当程序未正确同步时,就可能会存在数据竞争。Java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序。JMM对正确同步的多线程程序的内存一致性做了如下保证:如果程序是正确同步的,程序的执行将具有顺序一致性(Sequentially Consistent)——即程序的执行结果与该程序原创 2020-08-27 13:48:53 · 263 阅读 · 0 评论 -
【读书笔记】《Java并发编程的艺术》Java内存模型——重排序
一、数据依赖性原创 2020-08-26 19:17:03 · 188 阅读 · 0 评论 -
【读书笔记】《Java并发编程的艺术》Java内存模型——Java内存模型的基础
一、并发编程模型的两个关键问题在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 共享内存的并发模型:线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。但是,同步是显式进行的,程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。 消息传递的并发模型:线程之间没有公共状态,线程之间必须通过发送消息来显式原创 2020-08-25 13:33:58 · 208 阅读 · 0 评论