volatile和synchronized的區別

 閱讀大約需要1分鐘

volatile和synchronized的區別

  1. volatile本質是在告訴jvm當前變量在寄存器(工作內存)中的值是不確定的,需要從主存中讀取; synchronized則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住。

  2. volatile僅能使用在變量級別;synchronized則可以使用在變量、方法、和類級別的

  3. volatile僅能實現變量的修改可見性,不能保證原子性;而synchronized則可以保證變量的修改可見性和原子性

  4. volatile不會造成線程的阻塞;synchronized可能會造成線程的阻塞。

  5. volatile標記的變量不會被編譯器優化;synchronized標記的變量可以被編譯器優化