Java定义了两类有趣的修饰符:transient和volatile,这些修饰符用来处理特殊的情况。如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如:

class T { transient int a; // will not persist int b; // will persist
}

这里,如果T类的一个对象被写入一个持久的存储区域,a的内容不被保存,但b将被保存。

Volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变。一种这样的情形是多线程程序。在多线程程序里,有时两个或更多的线程共享一个相同的实例变量。考虑效率的问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在不同的时候更新,例如当进入synchronized方法时。

当这种方式运行良好时,它在时间上会是低效的。在某些情况,真正要紧的是变量主副本的值会体现当前的状态。

为保证这点,仅需把变量定义成volatile型,它告诉编译器它必须总是使用volatile变量的主副本(或者至少总是保持一些私有的最新的主副本的拷贝,反之亦然),同时,对主变量的获取必须以简洁次序执行,就像执行私有拷贝一样。

开课吧Java课堂:Transient和volatile修饰符如何运用相关推荐

  1. Java关键字transient和volatile小结(转)

    Java关键字transient和volatile小结(转) transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下. tran ...

  2. java中Volatile修饰符的含义

    在java语言中:为了获得最佳速度,同意线程保存共享成员变量的私有拷贝.并且仅仅当线程进入或者离开同步代码块时才与共享成员变量的原始值进行对照. volatilekeyword的作用就是提示vm:对于 ...

  3. Java语言中的-----访问修饰符

    day04 Java语言中的----访问修饰符 一.访问修饰符概述: 访问修饰符就是对变量或者是方法或者是类的一个修饰,通过修饰以后实现一些必要的权限,主要是说明类成员如何被使用的作用. 二.访问修饰 ...

  4. JAVA知识基础(三):修饰符

    JAVA中根据修饰对象的不同可以分为类修饰符.方法修饰符.变量修饰符三类,其中每种修饰符又可以单独分成两类:访问修饰符和非访问修饰符.为了便于理解,本文以访问和非访问的角度展开. 1.访问修饰符 访问 ...

  5. JAVA知识学习——类的修饰符

    Java程序在定义类时,除了使用class关键字标识之外,还可以在class之前增加若干类的修饰符来修饰限定所定义的类的特性.类的修饰符分为访问控制符和非访问控制符两大类.修饰符之间的先后排列次序对类 ...

  6. C和C++里的const常量、volatile修饰符的深层次说明

    目录 一.写在前面 二.分析C和C++中const常量被修改后值的状态 2.1 C中const常量被修改后值的状态 2.2 C++中const常量被修改后值的状态 2.3 C和C++中const常量被 ...

  7. 二十五、深入Java中的static静态修饰符

    @Author:Runsen @Date:2020/6/2 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  8. Java的四种访问修饰符介绍

    Java的四种访问修饰符详解 Java的四种访问修饰符分别是:public.protected.default.private 四种访问修饰符的访问范围: 访问修饰符类型 本类 本包 不同包中的子类 ...

  9. 一文理解C语言中的volatile修饰符

    一文理解C语言中的volatile修饰符 2019/12/2 FesianXu 前言 volatile修饰符是在嵌入式开发和多线程并发编程中常见的修饰符,理解其对于实践过程非常有帮助,此文参考了[1] ...

最新文章

  1. 我下载的最新的linux ADT+eclipse中没有NDK
  2. 浅谈高风险多团队协同的项目管理方法
  3. 【Flutter】插件包选择 ( 查看文档是否全面 | 查看插件包的更新版本次数 | 查看使用示例 | 查看 GitHub 项目的 Star Fork Issues )
  4. Python编程基础:第十五节 二维列表2D Lists
  5. python定义链表节点_Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】...
  6. 2017.0612.《计算机组成原理》总线结构
  7. php验证mysql内数据_MySQL中数据类型的验证_MySQL
  8. Java中的Runnable、Callable、Future、FutureTask的区别与示例
  9. java jmx 监控_利用VisualVm和JMX远程监控Java进程
  10. vbox虚拟系统和主系统自动挂载共享文件夹
  11. HashMap与ConcurrentHashMap的底层原理
  12. 调用jad生成器生成相应的.jad文件
  13. 怎么把图片的边缘弄圆_如何PS制做出边缘清晰或虚化的圆角照片
  14. 计算机管理无线网络 win10,如何在Windows 10中使用命令行管理WIFI无线网络
  15. mysql复制表结构并创建新表_mysql ---复制表结构---创建新表
  16. 最流行的统计假设检验速查表
  17. pandas过滤某列含有nan 的行
  18. 从0开始学Git——Git的常用配置
  19. 14、odoo的仪表板
  20. android小动画之Running Pig

热门文章

  1. sql 训练及总结
  2. SQL Server实际执行计划COST欺骗案例
  3. 利用UICollectionView实现瀑布流
  4. QT连接MySQL记录
  5. 《大道至简》的幕后故事(2):“愚公移山记”人物篇
  6. 自动驾驶算法-滤波器系列(六)——10+种经典滤波算法
  7. Reading Excel with Python
  8. ajax的结果处理,jQuery ajax返回数据的后续处理
  9. html2canvas保存网页到手机,利用html2canvas将当前网页保存为图片.
  10. 手机端与pc端页面html5,浅谈pc和移动端的响应式的使用