`
macken
  • 浏览: 346776 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

volatile变量

    博客分类:
  • Java
 
阅读更多

1.volatile变量

当变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存变量上的操作与其他内存操作仪器进行重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。

 

2.典型用法

检查某个状态标记以判断是否退出循环

volatile boolean asleep;
while(!asleep)
        continue;

volatile通常用于某个操作完成、发生中断或者状态的标志。与加锁机制比起来,volatile只能确保变量的可见性,并不能保证原子性

 

3.使用条件

1)对变量的写入操作不依赖变量的当前值,或者你能够确保只有单个线程更新变量的值;

2)该变量不会与其他状态变量一起纳入不变性条件中;

3)在访问变量时不需要加锁。

 

4.题目

一个volatile变量count=0,有1000个线程同时对它进行+1操作,最终count值为多少?

答案:不确定,volatile不能保证count=count+1是个原子性操作,所以最终结果是不确定的。

 

5.资料

http://www.ibm.com/developerworks/cn/java/j-jtp06197.html

分享到:
评论

相关推荐

    volatile 变量的说明

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

    stm32 volatile变量的正确使用

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

    java入门教程:数据类型_Java理论与实践如何正确使用Volatile变量.docx

    ### Java入门教程:数据类型与正确使用Volatile变量 #### 概述 在Java编程语言中,`volatile`关键字提供了一种轻量级的同步机制,用于确保共享变量的可见性和一定程度上的线程安全性。相比于传统的锁机制如`...

    深入探讨Java多线程中的volatile变量共6页.pd

    本资料《深入探讨Java多线程中的volatile变量》将带你深入理解这个概念,全面解析其工作原理和实际应用。 volatile关键字在Java中主要用于解决多线程环境下的可见性和有序性问题。它确保了被volatile修饰的变量对...

    loveincode#notes#实现内存可见的两种方法比较:加锁和volatile变量1

    加锁机制(即同步机制)既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性,原因是声明为volatile的简单变量如果当前值与该变量以前的值相

    quronghui#Embedded-written-reference#嵌入式的volatile变量1

    使用volatile变量的例子1). 并行设备的硬件寄存器(如:状态寄存器)2). 一个中断服务子程序中会访问到的非自动变量(Non-automaticvari

    Java并发编程(5)volatile变量修饰符-意料之外

    在Java编程语言中,`volatile`关键字是一个非常重要的并发控制机制,它被用来修饰类的成员变量,确保这些变量在多线程环境下的可见性和有序性。然而,使用`volatile`并非总是如我们所期望的那样简单,有时会出现一些...

    Java 理论与实践: 正确使用 volatile 变量 线程同步

     而volatile关键字是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。  使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,...

    Linux C中多线程与volatile变量

    综上所述,`volatile`在Linux C多线程编程中主要用于解决共享变量的可见性问题,但在处理多线程同步时,还需要结合其他的同步机制,如互斥锁(`mutex`)、条件变量等,以确保线程安全。理解`volatile`的关键在于它是...

    volatile变量的的概念和使用

    在C语言编程中,`volatile`是一个非常重要的关键字,它用于修饰变量,向编译器传达特殊的指示。本文将深入探讨`volatile`变量的概念、作用以及如何在实际编程中使用。 `volatile`变量的主要概念是它表明该变量的值...

    Java线程:volatile关键字

    正确使用 volatile 变量的条件是:对变量的写操作不依赖于当前值,以及该变量没有包含在具有其他变量的不变式中。在实际应用中,这些条件表明,可以被写入 volatile 变量的这些有效值独立于任何程序的状态,包括变量...

    Java Volatile 变量详解及使用方法

    Java中的`volatile`关键字是用来修饰变量的,它主要用于解决多线程环境下的数据同步问题。在Java语言中,`volatile`变量提供了一种轻量级的同步机制,它确保了共享变量的可见性和有序性,但并不保证原子性。 **可见...

    Java并发编程之volatile变量介绍

    即当一个线程修改了volatile变量,其他线程能够立即看到这个变化,无需通过缓存或内存屏障来同步。这是因为volatile变量不会被存储在处理器的寄存器或本地线程存储中,而是直接在主内存中操作。因此,每次读取...

    这个例子中包含多个线程和一个共享的volatile变量

    SharedData结构包含了一个volatile的布尔型变量isProduced和isConsumed,以及一个整型变量data。 生产者线程负责生产数据并更新isProduced标志。 消费者线程等待isProduced标志为true,然后消费数据并更新isConsumed...

    深入探讨Java多线程中的volatile变量

    Java多线程中的volatile变量是实现线程间通信的关键机制之一。它主要用于解决并发环境下的可见性和有序性问题,但不保证原子性。在多线程编程中,当多个线程共享同一变量时,可能会遇到数据不一致的问题,因为每个...

    loveincode#notes#volatile变量修饰符1

    这就可能造成一个线程在主存中修改了一个变量的值,而另一个线程还在继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。volatile是一种稍弱的同步机制,在访

    Volatile详解,深入学习Volatile

    - 防止编译器优化:编译器通常会优化掉被认为不变的变量的读取,但volatile变量告诉编译器不要做这样的优化,每次使用时都从内存中读取。 - 多线程同步:在多线程环境中,当一个线程修改了volatile变量,其他线程...

Global site tag (gtag.js) - Google Analytics