美文网首页
原子性、可见性、有序性

原子性、可见性、有序性

作者: 爱做梦的严重精神病患者 | 来源:发表于2019-03-15 22:22 被阅读0次

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

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

  • 原子性:即一个操作或者多个操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行

  • 可见性:指当多个线程访问同一个变量时,一个线程修改了这个变量的其他线程能够立即看得到修改的值

  • 有序性:即程序执行的顺序按照代码的先后顺序执行

volatile关键字

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

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

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

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

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

相关文章

网友评论

      本文标题:原子性、可见性、有序性

      本文链接:https://www.haomeiwen.com/subject/tfrdmqtx.html