`
mazhongjia
  • 浏览: 26279 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
最近访客 更多访客>>
社区版块
存档分类
最新评论

volatile关键字二

JVM 
阅读更多

java中int等不大于32位的类型上的简单操作都是原子操作,但是某些jvm的实现使得对long和double类型的操作并不是原子操作,这样就会造成错误数据的出现。

错误数据出现的原因是:
对于long和double变量,把他们作为2个原子性的32位值来对待,而不是一个原子性的64位值,
这样将一个long型的值保存到内存的时候,可能是2次32位的写操作,
2个竞争线程想写不同的值到内存的时候,可能导致内存中的值是不正确的结果。

1、写入高位32位值(线程2)
2、写入高位32位值(线程1)
3、写入低位32位值(线程1)  
4、写入低位32位值(线程2)


这样内存中的值变成线程1的高32位值和线程2的低32位值的组合,是个错误的值。上面出现问题的long和double变量是没有声明为volatile的变量,volatile本身不保证获取和设置操作的原子性,仅仅保持修改的可见性。但是java内存模型保证声明为volatile的long和double变量的get和set简单操作是原子的。 这也是volatile关键字主要作用:保证可见性。之外又一重要作用。

分享到:
评论

相关推荐

    java volatile 关键字实战

    java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java ...

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

    ### Java并发编程:volatile关键字解析 #### 一、内存模型的相关概念 在深入了解`volatile`关键字之前,我们首先需要理解计算机内存模型的一些基本概念。在现代计算机系统中,CPU为了提高执行效率,会将频繁访问的...

    深入解析Java中的volatile关键字:原理、应用与实践

    在Java并发编程中,volatile关键字是一种轻量级的同步机制,它用于确保变量的可见性和有序性。本文将详细探讨volatile关键字的工作原理、使用场景以及如何在实际开发中正确使用volatile。 volatile关键字是Java并发...

    详解C中volatile关键字

    详解C中volatile关键字 volatile关键字是C语言中一个重要的关键字,它对变量的声明在不同编译环境下可能造成不同的结果。volatile关键字的作用是提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序...

    java里的volatile关键字详解

    二、Volatile关键字详解 1. 可见性:volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。 2. 原子性:volatile只能让被他修饰内容具有...

    C++中volatile关键字及常见的误解总结

    C++中volatile关键字及常见的误解总结 C++中的volatile关键字是一种类型修饰符,用来修饰变量,表示该变量可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。 volatile关键字的主要作用是提供对...

    深入理解 volatile 关键字.doc

    深入理解volatile关键字 volatile关键字是Java语言的高级特性,它可以保证可见性和禁止指令重排序,但是要弄清楚其工作原理,需要先弄懂Java内存模型。 保证可见性 volatile关键字可以保证可见性,即当一个线程...

    深入多线程之:内存栅栏与volatile关键字的使用分析

    以前我们说过在一些简单的例子中,比如为一个字段赋值或递增该字段,我们需要对线程进行同步,虽然lock可以满足我们的需要,但是一个竞争锁一定会导致阻塞,然后忍受线程上下文切换和调度的开销,在一些高并发和性能...

    java volatile 关键字 学习

    java volatile 关键字 学习

    Java中volatile关键字实现原理

    Java中volatile关键字实现原理 volatile关键字是Java语言中的一种机制,用于保证变量在多线程之间的可见性。它是Java.util.concurrent包的核心,没有volatile就没有那么多的并发类供我们使用。本文详细解读一下...

    4.4 volatile关键字有什么作用?.rar

    在IT行业中,volatile关键字在编程,尤其是嵌入式系统和多线程编程中扮演着重要的角色。本篇文章将深入探讨volatile关键字的作用,并结合GD32F303单片机的使用场景,来阐述它在实际开发中的应用。 首先,volatile...

    Java并发volatile关键字.docx

    Java并发编程中,volatile关键字扮演着重要的角色,它是一种轻量级的同步机制,与synchronized相比,volatile在性能上更优,因为它不会导致线程阻塞。在深入理解volatile的关键特性之前,我们需要先了解Java内存模型...

    AVR-GCC 中如何使用volatile 关键字.pdf

    ### AVR-GCC 中如何使用 `volatile` 关键字 #### 1. `volatile` 关键字的基本概念 在编程语言中,尤其是C/C++中,`volatile` 是一个类型限定符,用来修饰变量,告知编译器该变量的值可能会在编译器未监控的情况下...

    Java线程:volatile关键字

    Java 线程 volatile 关键字详解 Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。volatile 变量的同步性较差,但它有时更简单并且开销更低。volatile 变量可以被看作是一种 “程度较轻的 ...

    Java多线程 volatile关键字详解

    Java多线程volatile关键字详解 Java多线程volatile关键字详解主要介绍了Java多线程volatile关键字的应用和原理。volatile是一种轻量同步机制,可以确保变量的可见性和顺序性,但不保证原子性。 volatile关键字的...

    一文精通Java中的volatile关键字

    Java中的`volatile`关键字是多线程编程中的一个重要概念,它的主要作用是确保共享变量的可见性和禁止指令重排序。本文将深入探讨`volatile`的关键特性、工作原理以及使用注意事项。 1. 可见性: `volatile`关键字...

    java里的volatile关键字详解.pdf

    java里的volatile关键字详解.pdf

    面试官最爱的volatile关键字.docx

    《面试官最爱的volatile关键字详解》 在Java编程中,volatile关键字是一个至关重要的概念,尤其在多线程环境下,理解并正确使用volatile是面试时必不可少的知识点。volatile被视为synchronized的一种轻量级实现,但...

    volatile关键字 Const关键字 static关键字 mutable 关键字

    2. `const` 关键字 `const` 关键字用于创建常量,一旦赋值后就不能修改。它可以修饰变量、函数参数、函数返回类型等。`const` 变量可以提高代码的可读性和安全性,防止意外修改。例如: ```cpp const int MAX_SIZE ...

    volatile关键字使用

    2. **多线程同步**:在多线程环境中,`volatile`变量可以作为线程间的共享状态,用于同步目的。虽然它不能替代锁机制,但可以确保一个线程修改后的值能立即被其他线程看到。然而,仅使用`volatile`无法保证原子性,...

Global site tag (gtag.js) - Google Analytics