二、并发编程之---并发的三大特性

1、可见性

1)是什么

可见性是一个线程修改了共享变量,另一个线程能立马看到

2)为什么会出现

①操作系统

在操作系统中,每个cpu都是从自己的缓存中读取数据,缓存中的数据是从主内存中获取的。
可能在某一时刻,其中一个cpu更改了自己的缓存数据,将数据更新主存中,而另一个cpu读取数据时,只是读取自己的缓存,缓存数据跟主内存数据不一致。
总结:针对多核cpu,每个cpu只读取自己的缓存数据导致了可见性。
对于单cpu而言,是不存在可见性问题的。

②java的可见性

在java中,所有数据存在放到主内存中,每个线程只读取自己的工作内存(此时的工作内存,相当于cpu的缓存),各个工作内存的数据不能被相互访问,读写时,每个线程只操作自己的工作内存中的数据。

2、原子性

1)是什么

原子性是指一个或多个操作不能被cpu中断,这些操作是一起执行完毕的

2)出现原因

由于cpu会给每一个操作分配时间差不多的时间片,对于每个操作,等自己的时间片的时间到了,就停止执行,需要等这个操作再次拿到cpu时间片后才继续执行。

3)经典案例

i++,包含了3个步骤
(1)先从主内存中获取到i
(2)对i做自加1
(3)将修改后的i写回到主内存中
如果线程a执行到了2,线程b从主内存拿到的i就不是想要的值了

3、有序性

1)是什么

有序性是程序按照代码的既定顺序执行

2)出现的原因

编辑器或解释器为了优化程序的执行性能,更改了执行顺序

3)经典案例

使用双重检查机制来创建单例对象

你可能感兴趣的:(java基础,java,java,开发语言)