`
zeng1990
  • 浏览: 52271 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

java中的volatile变量

阅读更多
当今天在《java并发编程实战》这本书中看到
“volatile的语义不足以确保递增操作(count++)的原子性,除非你能确保只有一个线程对变量执行写操作”[size=large][/size]
这句话才知道前几天的那个程序为啥会出错。
还有:
加锁机制既能确保原子性又能确保可见性,而volatile变量只能确保可见性。
当且仅当满足一下所有条件时,才应该使用volatile变量:
1、对变量的写入操作不依赖变量的当前值,比如对变量的++或者是--操作等,或者你能确保只有     单个线程更新变量的值
2、该变量不会与其他变量一起纳入不变性条件中。
3、在访问变量时不需要加锁。
分享到:
评论

相关推荐

    Java线程:volatile关键字

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

    volatile 变量的说明

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

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

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

    Java Volatile 变量详解及使用方法

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

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

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

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

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

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

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

    violate java-Java 之 volatile 超级详解

    Java中的`volatile`关键字是多线程编程中一个非常重要的概念,它用于修饰变量,确保在并发环境下,多个线程可以正确地共享和同步数据。本文将深入探讨`volatile`关键字的工作原理、特性以及如何使用它来解决多线程中...

    Java并发volatile关键字.docx

    然而,volatile变量在JVM中有着特殊的规定,当一个线程修改了volatile变量,这个修改会立即被其他线程感知,从而确保数据的可见性。这也就意味着,一旦一个线程修改了volatile变量,其他线程在读取这个变量时,总是...

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

    Java语言规范中指出:为了获得佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。  这样当多个线程同时与某个对象交互时,必须要注意到要让线程...

    Java中volatile关键字的总结.docx

    Java中的`volatile`关键字是用于处理并发编程中线程间通信和可见性的重要工具。它是一种轻量级的同步机制,比`synchronized`锁更为高效,因为它不会导致线程上下文的切换和调度,减少了不必要的开销。然而,`...

    java中volatile和synchronized的区别与联系

    Java 中 volatile 和 synchronized 的区别与联系 Java 中的 volatile 和 synchronized 是两种不同的关键字,它们都是用来解决多线程编程中出现的问题,但是它们的作用机制和使用场景却不同。 volatile volatile ...

    Java中Volatile的作用实例解析

    Volatile 变量在 Java 语言中扮演着重要的角色,它可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 ...

    Java并发编程之volatile变量介绍

    总的来说,volatile变量在Java并发编程中起到的作用是确保多线程环境下数据的可见性,但不能解决原子性问题。开发者需要根据具体的应用场景和需求来决定是否使用volatile,并结合其他的同步工具(如synchronized、...

    一文精通Java中的volatile关键字

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

    Java并发volatile可见性的验证实现

    在volatile变量中,我们使用volatile关键字来确保变量的可见性。在同样的示例代码中,我们发现子线程可以检测到flag的变化,并退出循环。这是因为volatile变量的修改对其他线程是可见的。 三、sleep的影响 在第三...

    java多线程_java多线程下变量共享_

    在Java中,线程共享变量可以通过两种方式实现:静态成员变量和实例成员变量。静态成员属于类,所有该类的实例都可以访问,因此在多线程环境下默认共享;实例成员变量则属于对象,每个线程都有自己独立的副本,除非...

    解析java中volatile关键字

    总结来说,`volatile`关键字在Java多线程编程中主要用于解决可见性和有序性问题,但不能替代`synchronized`或`Lock`来保证线程安全的修改共享变量。在设计并发程序时,理解这些概念的区别和使用场景是非常重要的。

    java 中volatile和lock原理分析

    这是因为volatile变量的修改会立即刷新到主内存,而其他线程在访问时会从主内存中获取最新值,从而保证了数据的一致性。 2. 防止指令重排序:Java编译器和JVM为了优化性能,可能会对指令进行重排序。但是,对于...

    Java并发编程(18)第五篇中volatile意外问题的

    文档可能还分析了volatile变量在循环中的使用。虽然volatile可以确保循环条件的更新立即可见,但是循环体内的其他非volatile变量的更新可能不会立即可见于其他线程。因此,使用volatile不能替代迭代过程中的同步措施...

Global site tag (gtag.js) - Google Analytics