1. 原子性
- read, load, assign, use, store write
- 基本类型的访问,读写(long, double 非原子性协定)
- monitorenter, monitorexit (jvm) ; lock, unlock, synchronized
2. 可见性
- volatile
- synchronized (对一个变量执行unlock操作之前,必须吧此变量同步回主内存中(store, write)
- final (在构造器中初始化完成后,并且构造器没有把“this”的引用传递出去(避免半初始化状态),其他线程可见;)
3. 有序性
- volatile(禁止指令重排)
- synchronize(持有同一个锁的两个同步代码块只能串行地进行)