一、volatile

修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值,当成员变量发生变化时, 会强制将变化值写回到共享内存。这样在任何时候,两个不同的线程总是看到成员变量的同一值。一个 volatile 对象引用可能是 null。

二、synchronized

关键字声明的方法同一时间只能被一个线程访问。synchronized 修饰符可以应用于四个访问修饰符。