volatile只能作用于變量,保證了操作可見性和有序性,不保證原子性。
在Java的內(nèi)存模型中分為主內(nèi)存和工作內(nèi)存,Java內(nèi)存模型規(guī)定所有的變量存儲在主內(nèi)存中,每條線程都有自己的工作內(nèi)存。
主內(nèi)存和工作內(nèi)存之間的交互分為8個原子操作:
- lock - unlock - read - load - assign - use - store - write - volatile修飾的變量,只有對volatile進(jìn)行assign操作,才可以load,只有l(wèi)oad才可以use,這樣就保證了在工作內(nèi)存操作volatile變量,都會同步到主內(nèi)存中。