原子性、可见性、有序性

2019-03-15  本文已影响0人  爱做梦的严重精神病患者

  摘自Java并发编程:volatile关键字解析

  在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。我们先看具体看一下这三个概念:

volatile关键字

  对于可见性,Java提供了volatile关键字来保证可见性

  当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值

  而普通的共享变量不能保证可见性,因为普通共享变量被修改之后什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。

  另外,通过synchronizedLock也能够保证可见性,synchronized和Lock能保证同一时刻只有一个线程获取锁然后执行同步代码,并且在释放锁之前会将对变量的修改刷新到主存当中。因此可以保证可见性。

  volatile不提供原子性,所以需要保证操作是原子性操作,才能保证使用volatile关键字的程序在并发时能够正确执行。

上一篇下一篇

猜你喜欢

热点阅读