volatile关键字

  • 程序在运行时,为了提高性能可能会将主存中的变量拷贝到CPU缓存当中,
  • 如果是非volatile变量,那么就可能会出现这样的问题:
    • 线程1读取变量并且进行修改,在还没有将其写会主存的时候,线程2读取同一个变量此时就出现了问题.因为非volatile变量无法保证什么时候从主存中读取数据,也无法保证什么时候写回主存.
    • 图示
  • volatile变量则可以确保了变量的修改会及时写回主存、变量直接从主存中读取

synchronized关键字

引用 http://tutorials.jenkov.com/java-concurrency/volatile.html