volatile只是轻量级的线程操作可见方式,并非同步方式,如果是多写场景,一定会出现线程安全问题。如果是一写多读的并发场景,使用volatile修饰则非常合适。volatile一写多读最典型的应用是CopyOnWriteArrayList。它在修改数据的时会把整个集合的数据全部复制出来,对写操作加锁,修改完成后,在用setArray()把array指向新的集合。使用volatile可以使读线程尽快的感知array的修改,不进行指令重排,操作后即对其他线程可见。
volatile只是轻量级的线程操作可见方式,并非同步方式,如果是多写场景,一定会出现线程安全问题。如果是一写多读的并发场景,使用volatile修饰则非常合适。volatile一写多读最典型的应用是CopyOnWriteArrayList。它在修改数据的时会把整个集合的数据全部复制出来,对写操作加锁,修改完成后,在用setArray()把array指向新的集合。使用volatile可以使读线程尽快的感知array的修改,不进行指令重排,操作后即对其他线程可见。