在多线程编程中,若干个线程为了可以实现公共资源的操作,往往是复制相应变量的副本,待操作完成后再将副本变量数据与原始变量进行同步处理。如下图。如果开发者不希望通过副本数据进行操作,而是希望可以直接进行原始变量的操作(节约了复制变量副本与同步的时间),则可以在变量声明时使用volatile关键字。

范例:使用volatile关键字定义变量

public class MyThread336 implements Runnable {private volatile int ticket=3;       //直接内存操作@Overridepublic void run() {synchronized (this) {    //同步处理while(this.ticket>0) {try {Thread.sleep(100);         //延迟模拟} catch (InterruptedException e) {e.printStackTrace();}    System.out.println(Thread.currentThread().getName()+"卖票处理,ticket="+this.ticket--);}}}}
public class ThreadDemo336 {public static void main(String[] args) {MyThread336 mt=new MyThread336();new Thread(mt,"售票员A").start();new Thread(mt,"售票员B").start();new Thread(mt,"售票员C").start();}
}

执行结果

售票员A卖票处理,ticket=3
售票员A卖票处理,ticket=2
售票员A卖票处理,ticket=1

本程序定义ticket属性时使用了volatile关键字进行定义,这样就表示该变量在进行操作时将直接会进行原始变量内容的处理。

volatile与synchronized的区别
答:volatile无法描述同步的处理,他只是一种直接内存的处理,避免了副本的操作,而synchronized是实现同步操作的关键字。此外,volatile主要在属性上使用,而synchronized是在代码块与方法上使用。

14.8 volatile关键字相关推荐

  1. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  2. 三 volatile关键字

    一:内存模型: 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入.由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问 ...

  3. volatile关键字对

    今天的工作中,我遇到了Java中的volatile关键字. 不太熟悉,我发现了以下解释: Java理论与实践:管理波动 鉴于该文章详细解释了所讨论的关键字,您是否曾经使用过它,或者是否曾见过可以正确使 ...

  4. c++ volatile关键字

    https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html 1.volatile关键字的使用 int x = 1; int ...

  5. JMM中的原子性、可见性、有序性和volatile关键字

    相信如果对JMM底层有过了解或者接触过java并发编程的读者对以上的概念并不陌生,但是真正理解的可能并不多.这里我就对这些概念再做一次讲解.相信读者多读几遍应该就有自己的理解,实在不理解也没关系,说明 ...

  6. java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化

    - Transient关键字 Java的serialization提供了一种持久化对象实例的机制.当持久化对象时,可能有一个特殊的对象数据成员,我们不想  用serialization机制来保存它.为 ...

  7. 【转】volatile关键字。编译器不优化,多线程会改。防止随时变动的

    [转]volatile关键字.编译器不优化,多线程会改.防止随时变动的 来自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/177743 ...

  8. volatile关键字及JMM模型

    开门见山说: 被volatile修饰的共享变量,就具有了以下两点特性: 1 .保证了不同线程对该变量操作的内存可见性;可见性: 在多线程情况下,读和写发生在不同的线程中,而读线程未能及时的读到写线程写 ...

  9. 就是要你懂 Java 中 volatile 关键字实现原理

    前言 我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用. 本文详细解读一下v ...

最新文章

  1. php版程氏音乐cms管理系统 v3.0后台登录_程氏舞曲管理系统CMSPHP
  2. 徐铁:当深度学习握手脑科学-圣城会议归来
  3. MusicXML 3.0 (7) - 连线、延音线
  4. System.arraycopy用法
  5. 影院要求自费购买3D眼镜是“霸王条款” 官方都开始吐槽了!
  6. 华中科技大学计算机系统结构,华中科技大学计算机系统结构考研
  7. 力扣 有序数组的平方
  8. 移动端前端月历日历_前端基础:必须要知道的移动端适配(2)——分辨率
  9. 如何提高企业数据质量
  10. Python的lambda, filter, reduce 和 map简介
  11. 基于springboot网上书城系统
  12. cachecloud java_【Spring Cloud】Redis缓存接入监控、运维平台CacheCloud
  13. 基于jquery的bankInput银行卡账号格式化
  14. 微信原版提示音_抖音阿豆微信提示音修改app-抖音很火的微信提示音阿豆铃声软件v1.0...
  15. php进行Markdown解析
  16. calander时间相关整合
  17. 【蓝桥杯2022】- 数的拆分
  18. 量子计算机科学家,再破纪录!中国科学家实现18个量子比特纠缠 为量子计算机奠基...
  19. Spring 中的Advice类型介绍
  20. 启动 jack server 出现 Could not find or load main class com.android.jack.launcher.ServerLauncher的问题

热门文章

  1. 这个是可以将得到速查编码的存储过程 如 中国人 可以得到 ZGR
  2. 在Android开发当中如何在一个app中打开淘宝app
  3. 红警ol服务器维护,红警OL基地升级条件汇总 腾讯红警OL手游基地升级表
  4. python对mp3格式文件标题专辑封面等信息修改
  5. [CODE【VS】]江哥的DP题d
  6. css hack方法,CSS Hack的基本原理和实现方式
  7. 一木禾网盘下载分析及批量获取下载地址的实现(下)
  8. Windows XP硬盘安装Ubuntu 12.04双系统图文详解
  9. c语言中整型常量ox,C语言基础教程:数字常量
  10. KubeSphere DevOps流水线部署