博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android Pro] static 和 Volatile 的区别
阅读量:7116 次
发布时间:2019-06-28

本文共 922 字,大约阅读时间需要 3 分钟。

reference to :

static也是各个业务方可以去全局修改;

volatile是处理多线程锁的替代方案,对应有时需要实时的修改共享资源的变量,被volatile修复的变量的值可以立刻被业务方取得最新的值。
 
不过,猛地感觉,nnd,这不是一样么,static是静态的,所以理论上也可以在不同线程去访问,能访问也就是能修改,所以这里老穆在网上搜了搜 相关的资料,把这个知识点在加强下:
 

变量放在主存区上,使用该变量的每个线程,都将从主存区拷贝一份到自己的工作区上进行操作。
volatile, 声明这个字段易变(可能被多个线程使用),Java内存模型负责各个线程的工作区与主存区的该字段的值保持同步,即一致性。
static, 声明这个字段是静态的(可能被多个实例共享),在主存区上该类的所有实例的该字段为同一个变量,即唯一性。
volatile, 声明变量值的一致性;static,声明变量的唯一性。
此外,volatile同步机制不同于synchronized, 前者是内存同步,后者不仅包含内存同步(一致性),且保证线程互斥(互斥性)。
static 只是声明变量在主存上的唯一性,不能保证工作区与主存区变量值的一致性;除非变量的值是不可变的,即再加上final的修饰符,否则static声明的变量,不是线程安全的。
下面摘自Java语言规范(Java Language Specification)的官方解释:
1) If a field is declared static, there exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created. 
2) A field may be declared volatile, in which case the Java Memory Model ensures that all threads see a consistent value for the variable。

 

转载地址:http://jeghl.baihongyu.com/

你可能感兴趣的文章
【JavaScript学习笔记】hello world
查看>>
如何实现一个可用的javaagent
查看>>
location对象说明
查看>>
常用模块与项目目录规范
查看>>
day83 前端框架--Vue基础&Vue组件
查看>>
公司memcache安装方式及启动方式
查看>>
ubuntu jdk1.7 安装
查看>>
行为型设计模式之模板方法(Template Method)
查看>>
android更新联系人姓名、号码
查看>>
hibernate json数据死循环
查看>>
拼多多店铺采集如何采集?【爬虫技术】
查看>>
采用无代理终端安全防护技术的八大理由
查看>>
提取MapInfo地图数据中的空间数据解决方案
查看>>
高性能缓存Memcached服务深度原理及实战
查看>>
高效数据同步工具rsync服务部署详解(下)
查看>>
DB2数据库指定时间点恢复案例
查看>>
jdk1.8下载全集,包括windows和linux版本
查看>>
《从Paxos到ZooKeeper:分布式一致性理论与实践》上市了
查看>>
临门一脚有何惧,小心驶得万年船
查看>>
Windows8快捷键汇总新手必会哦
查看>>