<深入理解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变量一定是被正确初始化了的。


参考:
[url]http://ifeve.com/java-memory-model-0/[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值