`
ouyida3
  • 浏览: 50099 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

volatile等

    博客分类:
  • java
 
阅读更多
volatile
和synchronized一起比较会好理解。同一个变量,什么都不用,各线程处理时,变量值在同一时间,可能是不同的;volatile能保证同一时间,变量值是一致的;synchronized能保证修改变量值是一个一个线程排队来的(比如同一时间,线程1和线程2都读取了变量i=1,没有问题,但是不用synchronized,就会同时修改i,如果是i=6,这样是没有问题的,因为不依赖任何东西,如果是i++,就非常有问题了,两个线程,++两次,应该i=3,由于没有synchronized,各搞各的,可能最后值为2)。

volatile保证读一致,synchronized保证读写一致。
volatile修饰变量,synchronized修改方法/代码块。

还有一点对理解很重要,java有主内存,就是说每个线程会把变量保存在线程局部,用了volatile就只会保存在共享。
分享到:
评论

相关推荐

    extern_volatile等修饰符的用法

    "extern_volatile等修饰符的用法" 在C++语言中,extern、volatile、const、static等修饰符都是非常重要的,它们可以影响变量的存储方式、生命周期和访问权限等。本文将详细介绍这些修饰符的用法和特点。 一、const...

    JUC包含线程,线程池,CAS,volatile等底层原理,以及相关问题的解决方式以及相关工具类的使用

    为了解决原子性问题,可以使用Java的Atomic包,如AtomicInteger、AtomicLong等,它们基于CAS操作,可以避免指令重排,保证多线程环境中的数据一致性。 **锁机制** 除了volatile,Java还提供了Lock接口及其实现,如...

    Volatile详解,深入学习Volatile

    - 与硬件交互:如控制硬件寄存器,硬件状态等。 - 实时系统:在实时系统中,volatile用于确保关键变量的更新不被编译器优化掉。 5. Volatile的限制: - 对于复杂的数据结构,如数组、结构体,volatile只能保证...

    volatile的用法讲解

    "volatile的用法讲解" volatile是一种特殊的变量修饰符,它告诉编译器,这个变量的值可能会被意外地改变,因此编译器不能对其进行...它常用于并行设备的硬件寄存器、中断服务子程序和多线程应用中被共享的变量等场景。

    volatile源码分析1

    【volatile源码分析1】 Java中的volatile关键字是一个关键的同步机制,它在多线程编程中扮演着重要的角色。在面试和技术讨论中,volatile经常成为焦点,但其工作原理却常常引发争议。本文将从JVM、C++以及汇编语言...

    const和volatile分析

    1. `volatile`的基本概念:`volatile`用于声明易变变量,表明该变量的值可能在编译器无法预见的情况下发生改变,例如在多线程环境、硬件中断、实时系统等。 2. 多线程编程:在多线程环境下,当一个变量可能被其他...

    volatile用法

    当一个变量被声明为`volatile`时,编译器会知道这个变量的值可能在运行时被外部不可预见的因素(比如硬件中断、多线程等)修改。因此,每次访问`volatile`变量时,都会从内存中读取最新的值,而不是依赖于寄存器中...

    stm32 volatile变量的正确使用

    ### STM32中Volatile变量的正确使用 #### 概述 在嵌入式系统编程中,`volatile`关键字的正确使用对于确保程序的稳定性和可靠性至关重要。它主要用于标记那些可能在程序运行过程中被外部因素(如硬件中断、多线程...

    volatile详解

    这是因为`volatile`主要用于标记那些可能会被外部因素(如其他线程、中断服务程序等)意外改变的变量,从而确保程序能够正确地读取这些变量的最新值。 #### 二、volatile的工作原理 在默认情况下,编译器为了提高...

    volatile的使用方法

    volatile 关键字在 C 语言中的使用方法 在 C 语言中,volatile 关键字是用来指定变量的存储类别的,它告诉编译器这个变量的值可能会在编译器不知道的情况下被修改,因此需要重新加载这个变量的值。volatile 关键字...

    Java线程:volatile关键字

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

    单片机C语言中volatile的作用

    在单片机或嵌入式系统中,硬件寄存器通常用于存储设备的状态信息,如I/O端口的状态等。这些状态可能会随着外部环境的变化而变化,例如传感器的数据更新。因此,使用`volatile`来声明这些寄存器对应的变量是非常必要...

    单片机中volatile定义的作用

    这对于单片机编程非常重要,因为单片机程序经常需要与硬件、中断、RTOS等打交道。 在单片机编程中,volatile关键字经常用于以下几种情况: 1. 中断服务程序中修改的供其它程序检测的变量需要加volatile 2. 多任务...

    volatile的用法

    这种用法在多线程、中断服务程序和硬件访问等场合特别重要。接下来详细说明volatile的用法和相关知识点: 1. 中断服务程序中的用法:当中断服务程序修改一个变量时,主程序需要检测这个变化。如果这个变量没有声明...

    volatile 变量的说明

    volatile变量在编程语言中,尤其是Java和C/C++中,是一种特殊的标识符,用于指示编译器该变量的值可能在编译器不知情的情况下发生变化。这个关键字的主要作用是告诉编译器不要对这个变量进行优化,每次使用时都需要...

    C中volatile_const解析

    ### C中`volatile`与`const`解析 #### 概述 在C语言中,`volatile`和`const`是两个非常重要的关键字,它们在不同的场景下有着独特的用途。掌握这两个关键字不仅能够帮助开发者写出更加高效和可靠的代码,还能够在...

    volatile使用详解

    - **内存模型**:Java 或 C++ 等语言都有自己的内存模型,`volatile` 关键字的实现依赖于这些内存模型。例如,在 Java 中,`volatile` 变量能够确保可见性,即当一个线程修改了 `volatile` 变量后,其他线程能立即...

    java volatile 关键字实战

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

    volatile变量

    ### volatile变量详解 #### 一、volatile的基本概念与作用 `volatile`是一个在编程语言中常用的关键词,尤其是在C/C++中。它用于定义一个变量,表明该变量可能会被意想不到的方式改变,这种改变可能是由硬件、中断...

Global site tag (gtag.js) - Google Analytics