java volatile关键字的学习

1 volatile的覆盖范围是变量级别的,同步代价低  

2 volatile通知jvm将变量放到主存而不是放到工作内存,这样各个线程就是共享这个变量,进而可以直接读取  

3 缺点:   

  容易出问题   

  难设计   

  存在脏数据,只保证了数据的可见性,无法保证原子性  

4 CPU原语CAS配合volatile使用实现同步   

  CompareAndSet实现非阻塞算法   

  CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)  

5 结合AtomicInteger的同步实现来学习  非阻塞算法 (nonblocking algorithms)   

  具体参见:    http://blog.csdn.net/hsuxu/article/details/9467651  

6 CAS缺点:   

  开销大,

  不停地循环   

  ABA问题  

7 由ABA问题可以看出AutomicInteger不是严格意义上实现同步,可通过AtomicStampedReference加上版本控制来实现同,具体参见:   http://hustpawpaw.blog.163.com/blog/static/184228324201210811243127/

 
posted @ 2014-04-16 11:52  晓东0  阅读(137)  评论(0编辑  收藏  举报