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/