valatile
被volatile修飾的共享變量保證不同線程對(duì)于此變量進(jìn)行操作時(shí)的可見性,即一個(gè)線程修改了某個(gè)變量的值,這新值對(duì)于其他線程來說是立即可見的,并且將會(huì)禁止進(jìn)行指令重排序。
其本質(zhì)是告訴jvm當(dāng)前變量在寄存器中的值是不確定的,需從主內(nèi)存中讀取。
synchronized
當(dāng)它使用在變量上時(shí),將會(huì)鎖定當(dāng)前變量,只有當(dāng)前線程可以訪問該變量,其他線程被阻塞。
synchronized和volatile的區(qū)別
1.volatile僅能使用在變量級(jí)別,synchronized則可以使用在變量、方法、類級(jí)別上。
2.volatile僅僅能實(shí)現(xiàn)變量修改可見性,并不能保證原子性,synchronized可以實(shí)現(xiàn)變量的修改可見性和原子性。
3.volatile不會(huì)造成線程阻塞,synchronized可能會(huì)造成線程阻塞。
4.volatile標(biāo)記的變量不會(huì)被編譯器優(yōu)化,synchronized標(biāo)記的變量可以被編譯器優(yōu)化。