美文网首页
volatitle关键字

volatitle关键字

作者: 耳_总 | 来源:发表于2017-08-09 11:32 被阅读25次

1、volatitle是java的一种轻量级的并发机制
2、被volatitle修饰的关键字也存在并发问题
3、一般的变量在使用时需要把变量从主内存控件加载到工作内存空间(可以映射为堆内存和栈内存模型),工作内存空间是线程私有,然后使用外之后才能更新到主内存,这期间的操作不是原子操作,所以在高并发下,存在存储不一致问题。
4、volatitle关键字修饰的变量能够保证每次在工作空间使用内存时从主内存刷新变量的值,改变之后跟新到主内存,但是在使用的时候并不能保证是原子操作,在更新内存的之前,可能其他线程已经改变了变量 的值了,所以还是存在并发问题。只是比普通的变量“更可靠”罢了。
5、所以volatitle关键字只能保证可见性。我们仍然需要加synchronize或者concurrent包里面的类来保证原子性。

在不符合下面两条规则的场景中,仍需要枷锁:
1、运算结果并不依赖变量当前的值,或者保证只有单一线程修改变量的值
2、变量不需要与其他状态变量共同参与不变约束。
比如下列场景就是好volatitle关键字:
volatitle boolean isRun;
public void changeState() {
isRun = fasle;
}
public void run() {
while(isRun ) ....
}
当changeState方法执行的时候,其他线程的run方法立即停止执行。

使用volatitle的第二个语义是禁止指令重排(指令重排:多条指令交给cpu执行的时候,可以进行优化,不按顺序交给多条电路执行),指令重排会造成同一段代码多次执行的顺序不一定相等。

  • 原子性、可见性、有序性
    有序性:在线程内部观察都是有序的,在一个线程观察另一个线程都是无序的。前半句是指线程串行语义,后半句是指指重排现象和工作内存与主内存同步现象。

相关文章

  • volatitle关键字

    1、volatitle是java的一种轻量级的并发机制2、被volatitle修饰的关键字也存在并发问题3、一般的...

  • 历年阿里面试题汇总

    Volatitle的特征? Volatitle的内存语义? Volatitle的重排序? 内存屏障/内存栅栏? h...

  • Java多线程与并发

    1. volatitle volatitle对共享变量进行同步。在写入volatitle变量值之后,CPU缓存中的...

  • 线程学习记录05-原子类型

    有如下代码: 运行结果: 这里count已然加上了volatitle关键字修饰,但是产生的数据依旧是线程不安全的。...

  • volatile详解

    今天来介绍一下volatitle volatile是什么 volatitle是一个确保共享变量能够被准确和一致地更...

  • synchronized 与 volatitle

    synchronized关键字最主要的三种使用方式: 修饰实例方法,作用于当前对象实例加锁,进入同步代码前要获得当...

  • 聊聊java内存模型

    本文目录 Java内存模型 重排序 内存屏障 volatitle的内存语义 final的内存语义 一、Java内存...

  • 多线程使用小结

        在多线程编程中,解决线程之间的协作、数据共享等问题,不可避免需要用到volatitle、synchroni...

  • JAVA Obeject o = new Object()

    总览 1.对象创建的过程 (半初始化)2.DCL 是否需要 volatitle (指令重排)3.对象内存结构(对象...

  • c语言编程精解及面试攻略-2-3

    第2章 数据类型与操作符 使用 #define比const的好处是常量不占用内存 volatitle表示该变量值在...

网友评论

      本文标题:volatitle关键字

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