ZPY博客

Java多线程总结之(三)volatile关键字

使用volatile关键字主要是为了让多个线程能取到正确的实例变量的值。它能强制的从公共内存中读取变量的值。但volatile关键字最致命的缺点是不支持原子性。

 

Volatile与synchronized比较:

 

 

这里需要注意的是,修改实例变量中的数据,比如i=i+1,这样的操作并不是一个原子操作,也就是非线程安全的。表达式i++的操作步骤分解如下:

假如在2)计算i的值时,另外一个线程也修改i的值,那么这时候就会出现脏数据。解决办法其实就是使用synchronized关键字。

 

另外,synchronized代码块有volatile同步的功能。