voliate内存屏蔽性
java 线程内存模型
1、线程有线帧,当线程启动的时候将变量缓存到线帧,各个线程之间不同步。这就是内存屏蔽性
2、voliate可以破除内存屏蔽性,但是并不保证线程安全
3、多个线程都在内部加载了被voliate修饰的变量,在汇编的时候自动给该字段添加lock的值
4、当线程A对该字段改动的时候,会给总内存发送store消息,主内存会给所有引用该字段的线程发送lock指令,
A修改完会立即writer到主内存,释放锁,并将所有引用的线程(BCD等)针对该字段设置为无效
5、别的线程如果用到这个字段,如果是lock 的时候则会等待,基于总线嗅探技术,会实时监控主内存,由于被无效,就会去
load新值
6、如果多个线程都去修改该字段,则让主内存进行排序,选定一个线程去修改,别的等待
内存赋值速度很快,所以加锁操作对内存影响不太大,MESI协议
sync 基于C++实现的同步机制,1.6后sync进行大量优化
推荐aqs,基于java 实现
还没有评论,来说两句吧...