Java教程

原子性和可见性

本文主要是介绍原子性和可见性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  • volatil 可见性,强制刷新主存中的变量到各个CPU的缓存中,使各个CPU中缓存的变量与主存中一致,各个线程所使用的变量一致,读一致性【线程A写变量后刷新到主存中,线程B会刷新自己缓存中的变量=主存中的变量(即线程A写后的变量),如果变量没有用volatile修饰,线程B缓存中的变量不会刷新,即volatile保证了变量对每个线程是可见的】,但是volatile不具有传递性,即volatile修饰的对象的内部属性不具有可见性

  • atomic类,将读写操作封装成一步,即变量具有原子性。如 i++,那么每个线程的缓存都会去读取上一个线程操作后的变量(上一个线程会将操作后的变量刷回到主存中),可以看到atomic类中的变量都是 volatile 修饰的,即 原子性以可见性为前提

  • synchronized,保证同一时间只有一个线程进入代码块,即整个代码块的原子性

这篇关于原子性和可见性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!