<深入理解Java内存模型>读后感

多核运行的环境下,由于每个CPU都有自己的读写缓存,导致的是一个线程上写的内容,不一定在另一个线程里可见。

JMM(Java memory model)做为语言级别的内存模型,为程序员提供易于理解的内存模型(通过volatie和锁机制,在编译的时候插入内存屏障,限制处理器的指令重排),同时尽量放松对处理器指令重排的限制(处理器重排指令,是为了更好利用处理器的缓存,提升效率).

Break it down:

1. volatile:

   1.1 对volatile变量的读写,都等价于加了锁的操作

   1.2 对volatile变量的写,相当于释放锁; 对volatile变量的读,相当与获取锁.

       原因:对volatile变量的写,会把处理器写缓存的数据写到主内存
            对volatile变量的读,之前会从主内存中读入数据到处理器缓存

       所以保证了:如果volatile变量的写在volatile变量的读之前,那么volatile写之前包括对volatie变量的写操作,对volatile变量的读和之后的操作可见

2. 锁

   通过volatile变量+CAS操作,构建出一套程序员易于编程的多线程同步工具。

   (java的lock不是busy wait的,应该是sleep的。 回忆unix网络编程第二卷:进程间通信, mutex是需要不断轮询的,condition是可以睡在上面和唤醒的,可以用mutex+condition实现锁)

3. final

   主要是对final变量的初始化,和包含它的构造函数,限制重排序(以加入内存屏障的方式)。以达到如果对象的引用可用,那么final变量一定是被正确初始化了的。


参考:
http://ifeve.com/java-memory-model-0/

猜你喜欢

转载自illidantorch.iteye.com/blog/1917136