Java中的易失和同步关键字

use*_*906 0 java

可能重复:
JAVA中的volatile和synchronized之间的差异(j2me)

我用2个Java关键字的有点混乱synchronizedvolatile.

据我所知,由于java是一种multi-threaded语言,并且通过使用关键字synchronized将强制它在1个线程中执行.我对么 ?

而且volatile也做同样的事情?

小智 6

volatile和synchronized都保证可见性,但synchronized也提供了原子性:

  • 如果一个线程线程读取一个volatile变量,它可以保证看到先前对同一个变量的写入,包括它们是否由其他线程完成
  • synchronized块提供相同的保证(只要写入和读取完成持有相同的监视器),但也提供原子性保证:同步块中的所有指令将从同一锁上同步的另一个线程看起来是原子的.