深入了解Java内存模型
本文主要是记录下自己学习的笔记,主要记录以下几个方面: 1、java内存模型的基础 2、重排序 3、顺序一致性 4、volatile内存语义 5、锁的内存语义 6、final域的内存语义 7、happens-before 8、双重检查锁定与延迟初始化 9、Java内存模型综述 一、Java内存模型的基础 1、并发编程模型的两个问题 在并发编程中,需要了解并会处理这两个关键问题: 1.1、线程之间如何通信? 通信是指线程之间以何种机制来交换信息 。在命令式编程中,线程之间的通信机制有两种: 共享内存和消息传递 。 a) 在 共享内存 的并发模型里, 线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。(重点) b) 在 消息传递 的并发模型里, 线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。 1.2、线程之间如何同步? 同步是指程序中用于控制不同线程间操作发生相对顺序的机制。 在共享内存的并发模型里,同步是显示进行的 。因为程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。 在消息传递的并发模型里,由于消息的发送必须在消息的接收之前,因此同步是隐式进行的。 知道并了解上面两个问题后,对java内存模型的了解,就打下了基础