首页 > 其他 > 详细

原子性、可见性、有序性

时间:2021-02-20 16:02:08      阅读:31      评论:0      收藏:0      [点我收藏+]

 

1、原子性

  • 概念

    • 在一个操作中,cpu不可以在中途暂停再调度,也就是一个操作不能被终端,要么执行完成,要么就不执行

  • Java内存模型保证原子性的操作:

    • 基本数据类型的访问、读写都是具备原子性的(可以不用太在意long、double的非原子性协定)

    • synchronized关键字

      • 底层是两个字节码指令,monitorenter和monitorexit

 

2、可见性

  • 概念

    • 当一个线程修改了共享变量的值时,其他线程能立即得知这个修改

  • Java内存模型保证可见性的操作

    • volatile

      • 在变量读取前从主内存刷新变量

      • 在对变量进行修改后将变量刷新到主内存

    • synchronized

      • 在对一个变量执行unlock之前,必须先把此变量同步回到主内存中

    • final

      • 被final修饰的字段在构造器中被初始化完成,并且构造器没有把“this”的引用传递出去,在其他线程中就可以访问final字段的值

 

3、有序性

  • 概念

    • 如果在本线程内观察,所有的操作都是有序的

      • 线程内似表现为串行的语义

    • 如果在一个线程中观察另一个线程,所有线程都是无序的

      • 指令重排序

      • 工作内存与主内存同步延迟

  • Java内存模型保证有序性的操作

    • volatile

      • 禁止指令重排序

    • synchronized

      • 一个变量在同一时刻只允许一条线程对其进行lock操作,决定了持有同一个锁的两个同步块只能串行地进入

原子性、可见性、有序性

原文:https://www.cnblogs.com/LittleSkinny/p/14420108.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!