保证线程安全的三个方面
1.原子性:保证同一时刻该资源只能有一个线程访问修改,其他线程阻塞等待,例如Atomic包,锁
2.可见性:一个线程对于主内存的数据操作对于其他线程是可见的
3.有序性:一个线程观察其他线程中指令执行顺序,由于指令重排序存在,观察结果一般杂乱无序
原子性: 互斥访问,Atomic包,CAS算法,Synchronized,Lock
可见性:synchronized,volatile
顺序性:happends-before