synchronized和volatile
volatile僅能使用在變量級別;synchronized則可以使用在變量、方法、和類級別的。
volatile保證了變量的可見性,synchronized保證了原子性和可見性。
volatile
原理:首先我們要先意識到有這樣的現象,編譯器為了加快程序運行的速度,對一些變量的寫操作會先在寄存器或者是CPU緩存上進行,最后才寫入內存。而在這個過程,變量的新值對其他線程是不可見的,而volatile的作用就是使它修飾的變量的讀寫操作都必須在內存中進行。volatile告訴JVM, 它所修飾的變量不保留拷貝,直接訪問主內存中的。