返回顶部
首页 > 资讯 > 精选 >Java中Volatile关键字详解及代码示例
  • 250
分享到

Java中Volatile关键字详解及代码示例

javavolatile关键字ava 2023-05-30 22:05:22 250人浏览 安东尼
摘要

一、基本概念先补充一下概念:Java内存模型中的可见性、原子性和有序性。可见性:可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了

一、基本概念

先补充一下概念:Java内存模型中的可见性、原子性和有序性。

可见性:

可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。

可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不能保证它具有原子性。比如volatileinta=0;之后有一个操作a++;这个变量a具有可见性,但是a++依然是一个非原子操作,也就是这个操作同样存在线程安全问题。

在Java中volatile、synchronized和final实现可见性。

原子性:

原子是世界上的最小单位,具有不可分割性。比如a=0;(a非long和double类型)这个操作是不可分割的,那么我们说这个操作时原子操作。再比如:a++;这个操作实际是a=a+1;是可分割的,所以他不是一个原子操作。非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作。一个操作是原子操作,那么我们称它具有原子性。java的concurrent包下提供了一些原子类,我们可以通过阅读api来了解这些原子类的用法。比如:AtomicInteger、AtomicLong、AtomicReference等。

在Java中synchronized和在lock、unlock中操作保证原子性。

有序性:

Java语言提供了volatile和synchronized两个关键字来保证线程之间操作的有序性,volatile是因为其本身包含“禁止指令重排序”的语义,synchronized是由“一个变量在同一个时刻只允许一条线程对其进行lock操作”这条规则获得的,此规则决定了持有同一个对象的两个同步块只能串行执行。

下面内容摘录自《JavaConcurrencyinPractice》:

下面一段代码在多线程环境下,将存在问题。

+ View codepublic class NoVisibility { private static boolean ready; private static int number; private static class ReaderThread extends Thread {  @Override  public void run() {   while(!ready) {    Thread.yield();   }   System.out.println(number);  } } public static void main(String[] args) {  new ReaderThread().start();  number = 42;  ready = true; }}

--结束END--

本文标题: Java中Volatile关键字详解及代码示例

本文链接: https://lsjlt.com/news/221480.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中Volatile关键字详解及代码示例
    一、基本概念先补充一下概念:Java内存模型中的可见性、原子性和有序性。可见性:可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了...
    99+
    2023-05-30
    java volatile关键字 ava
  • java中volatile关键字的作用与实例代码
    一,什么是volatile关键字,作用是什么  volatile是java虚拟机提供的轻量级同步机制 ​ 作用是: 1.保证可见性 2.禁止指令重排 3.不保...
    99+
    2024-04-02
  • Java volatile关键字特性实例代码分析
    这篇文章主要讲解了“Java volatile关键字特性实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java volatile关键字特性实例代码分析”吧!一...
    99+
    2023-07-04
  • Java关键字volatile详析
    目录一、可见性二、关于指令重排volatile关键字关于先说它的两个作用: 保证变量在内存中对线程的可见性禁用指令重排 每个字都认识,凑在一起就麻了 这两个作用通常很不容易被我们Ja...
    99+
    2024-04-02
  • JAVA并发中VOLATILE关键字的示例分析
    小编给大家分享一下JAVA并发中VOLATILE关键字的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!并发编程中的三个概念:1.原子性在Java中,对基本...
    99+
    2023-06-15
  • Java Synchronize下的volatile关键字详解
    简介关键词:Synchronize与volatile Synchronize:无论是对于Synchronize同步方法异或是Synchronize块,本质是对某对象或某类加锁,...
    99+
    2024-04-02
  • java中的volatile关键字
    目录1.volatile实现可见性的原理是什么?2.演示volatile的可见性1.volatile实现可见性的原理是什么? 有volatile变量修饰的共享变量进行写操作的时候汇编...
    99+
    2024-04-02
  • Java中的final关键字详解及实例
    Java中的final关键字1、修饰类的成员变量 这是final的主要用途之一,和C/C++的const,即该成员被修饰为常量,意味着不可修改。 上面的代码对age进行初始化后就不可再次赋值,否则编译时会报类似上图的错误。 如果修...
    99+
    2023-05-31
    java final 关键字
  • 详解Java并发编程之volatile关键字
    目录1、volatile是什么?2、并发编程的三大特性3、什么是指令重排序?4、volatile有什么作用?5、volatile可以保证原子性?6、volatile 和 sy...
    99+
    2024-04-02
  • c++中的volatile和variant关键字详解
    目录一、两个长得有点像的变量二、二者的功能三、应用实例四、总结一、两个长得有点像的变量 对volatile关键字,其实很多人只是能用,知道用到啥处,但其实应用的原理并不知道。在一些多...
    99+
    2024-04-02
  • Java Volatile关键字如何理解
    Java Volatile关键字如何理解,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。正文在谈 Volatile 之前,我们先回顾下 Java 内存模...
    99+
    2023-06-22
  • Java中volatile关键字的作用
    目录一、volatile作用二、什么是可见性三、什么是总线锁和缓存锁四、什么是指令重排序一、volatile作用 可以保证多线程环境下共享变量的可见性通过增加内存屏障防止多个指令之间...
    99+
    2024-04-02
  • JAVA并发中VOLATILE关键字的神奇之处详解
    并发编程中的三个概念: 1.原子性 在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。 2.可见性 对于可见性,Jav...
    99+
    2024-04-02
  • Java Web关键字填空示例详解
    (1)在TestServletRequest中将名为“param”,值为“HelloWorld”的信息存入request范围内,并利用...
    99+
    2024-04-02
  • Java并发编程之关键字volatile的示例分析
    这篇文章给大家分享的是有关Java并发编程之关键字volatile的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、作用被 volatile 修饰的变量保证了不同线程对该变量操作的内存可见性禁止指令重排...
    99+
    2023-06-15
  • Java中不可或缺的关键字volatile详析
    目录什么是volatile关键字保证可见性保证有序性变量初始化赋值懒汉式单例 -- 双重校验锁 volatile版隐藏特性无法保证原子性volatile版synchronized版L...
    99+
    2022-12-27
    java关键字volatile作用 java关键字volatile原理 java关键字volatile
  • 多方面解读Java中的volatile关键字
    目录介绍作用保证变量的可见性:禁止指令重排:不能保证原子性可见性、有序性、原子性不会导致线程阻塞使用场景实现原理happens-before局限性和 synchronized 关键字...
    99+
    2023-05-19
    Java volatile volatile作用 volatile关键字
  • Java中volatile关键字有什么用
    这篇文章将为大家详细讲解有关Java中volatile关键字有什么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。概述Java语言中关键字 volatile 被称作轻量级的 synchron...
    99+
    2023-06-19
  • Java中volatile关键字实现原理
    前言我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用。本文详细解读一下volatile关键字如何保证变量在多线程之间...
    99+
    2023-05-31
    java volatile 关键字
  • C++中的volatile关键字及其作用
    volatile是C语言的一个关键字,该关键字的作用是保持内存的可见性 例子: 我们对2号信号进行了捕捉,当该进程收到2号信号时会将全局变量flag由0置1, 也就是说,在进程收到2...
    99+
    2023-05-16
    C++ volatile关键字 C++ volatile关键字的作用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作