reference:http://www.cnblogs.com/dolphin0520/p/3920373.html
http://sakyone.iteye.com/blog/668091
http://blog.csdn.net/lishehe/article/details/47165727
总结:
三种并发:synchronized,volatile,lock
synchronized单线程,线程安全,但效率不足;
volatile:能保证可见性,顺序性,但是不能保持原子性,特别是在i++,并不总是线程安全的
Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用 volatile 还不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式(Invariants)的类(例如 “start <=end”)