voliate理解

voliate理解voliatevoliate定义java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM…

大家好,又见面了,我是你们的朋友全栈君。

voliate

 voliate定义

java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。

即一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

(1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。保证可见性、不保证原子性。
(2)禁止进行指令重排序

使用volatile关键字的场景

一般使用voliate必须具备如下条件:

(1)对变量的写操作不依赖于当前值

(2)变量中没有包含影响外部的其他变量

第一种就是适合单例模式来修饰单例对象

public class Signle {
    private static volatile Signle SIGNLE;

    private Signle() {
    }

    public static Signle getInstance0() {
        return SingleLazy.SIGNLE;
    }

    public static Signle getInstance() {
        if (null == SIGNLE) {
            synchronized (Signle.class) {
                if (null == SIGNLE) {
                    SIGNLE = new Signle();
                }
            }
        }
        return SIGNLE;
    }
第二种情况就是该变量是全局的属性,如果变化,会导致全局所有的线程都作出相应的操作。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135411.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • navicat15最新激活码_通用破解码「建议收藏」

    navicat15最新激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • vgg模型的优缺点_vgg模型

    vgg模型的优缺点_vgg模型转自:VGGNet阅读-VeryDeepConvolutionalNetworksforLarge-ScaleImageRecognition[转]这篇文章是以比赛为目的——解决Ima…

    2022年10月29日
  • SSH会话连接超时问题

    SSH会话连接超时问题

  • ubuntu 安装 mariadb 数据库

    ubuntu 安装 mariadb 数据库卸载之前的数据库sudoaptpurgemariadb-server*安装数据库sudoaptinstallmariadb-server-y由于出于安全原因,mariadb初始化使用的操作系统的root认证,而不是密码认证.所以这里添加用户和启动密码认证.#添加用户’%’:表示所有主机的ipCREATEUSER’用户名’@’%’IDENTIFIEDBY’密码’;#将数据库访问权限赋值给用户grantALLon数据库.表名to’用户名’

  • mpu9150(driverack pa简明教程)

    简述MotionDriver是Invensense的针对其Motion传感器的软件包,即Motion传感器的驱动,目前已支持MPU6050/MPU6500/MPU9150/MPU9250这些传感器。MotionDriver并非全部开源,核心的算法部分是针对ARM处理器和MSP430处理器编译成了静态链接库提供的。MotionDriver文件结构arm\STM32F4_MD6do

  • 操作系统课设详细解答

    操作系统课设详细解答操作系统课设详细解答一、题目一实验一Windows进程管理二、实验目的(1)学会使用VC编写基本的Win32ConsolApplication(控制台应用程序)。(2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows进程的“一生”。(3)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程……

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号