volatile和synchronized
版权声明:本文为博主原创文章,未经博主允许不得转载。 http://www.cnblogs.com/jokermo/ 0. 前言 转载请注明出处: http://www.cnblogs.com/jokermo/ volatile和synchronized都是解决多线程安全问题的方法,为了了解与使用这两个修饰符,首先需要了解什么是多线程安全问题。即多线程安全问题发生的原因。多线程安全问题产生的原因可以概括为两点: 线程任务中处理到 共享数据 。 线程任务中有多条 共享数据操作 ,一条线程在操作共享数据的过程时,另一条线程参与了运算,造成了数据错误。 解决多线程问题的思想: 只要保证多条操作共享的代码在某一时间段内被同一条线程操作,在执行期间不允许其他线程参与运算。这下就运用到了 volatile 和 synchronized 了。 1.Java内存模型简称 JMM (Java Memory Model) JMM用来屏蔽不同硬件和操作系统的内存访问差异,期望Java程序在各种平台上都能实现一致的内存访问效果。 主内存: 主内存可以简单理解为计算机当中的内存,但又不完全等同。主内存被所有的线程所共享,对于一个共享变量(比如静态变量,或是堆内存中的实例)来说,主内存当中存储了它的“本尊”。 工作内存: 工作内存可以简单理解为计算机当中的CPU高速缓存,但又不完全等同