IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 线程中的volatile关键字 -> 正文阅读

[Java知识库]线程中的volatile关键字

一:现象说明

  1. A B两个线程都访问到一个变量,若B修改了该变量,则A不一定马上知道该变量被改变了
  2. volatile关键字,使一个变量在多个线程间可见
  3. 使用volatile关键字修饰变量,会使得所有线程都会实时读到变量修改后的值
    使用volatile前:
    在这里插入图片描述
    输出结果:
    在这里插入图片描述
    使用volatile后输出结果:
    在这里插入图片描述

二:volatile的作用

1.保证线程的可见性

多个线程都会有共享内存,每个线程都会有自己单独的工作内存,每个线程都会将共享内存中的变量复制一份到自己的工作内存以供使用,所以存在的问题是一个线程更改这个变量后虽然同时改变了共享内存的变量,但另一线程读取这个变量时一般读的是自己的工作内存,不一定能保证实时读取到共享内存中改变后的值。
当volatile修饰后,将保证一个线程修改变量后,另一个线程实时可读被改变后的值

2.禁止指令重排序

单例模式为例:
在这里插入图片描述

new一个对象的三步:
1.给这个对象申请内存,会有一个默认值,比如整型默认为0
2.初始化
3.将实例指向内存,即赋值
指令重排序带来的问题:
可能在指令2(步骤2)还未执行时,先执行了指令3(步骤3),那最终得到的值将会是默认值0
volatile修饰后解决的问题:
禁止指令重排序,一定会保证初始化完成后才会赋值给实例对象

面试题:

问:单例模式中需要使用volatile关键字吗?
答案:需要,原因就是可能会有指令重排序问题,一般在超高并发下才会出现该问题

三:volatile不能代替synchronized

volatile只能保证线程的可见性(即多个线程可实时读),不能保证变量的原子性
例:

int count = 0;
count++;

即多个线程虽然可以实时读到一个线程++后的count值1,但多个线程都++成2了,结果是多个线程++后还是2

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:57:15  更:2022-04-04 11:57:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:00:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码