Java 的 volatile 修饰符】的更多相关文章

今天学java特性时,发现了volatile修饰符,这个修饰符修饰的变量告诉java编译器忽略优化机制,这样的优势是: java优化后,寄存器会缓存内存里的变量,另一个线程修改这个变量的内存时,不会同步到另一个线程变量的寄存器,加上volatile修饰符后,java不会增加寄存器缓存机制,这样会让变量直接读写内存,达到多线程协调作用.总结一句话为可见性. 应用场景: 1.多线程变量读取时,多个线程可以都读内存,另一个线程修改变量内存,而本线程还在读取寄存器中的变量,导致死循环 2.单例时使用,在…
在java语言中:为了获得最佳速度,同意线程保存共享成员变量的私有拷贝.并且仅仅当线程进入或者离开同步代码块时才与共享成员变量的原始值进行对照. volatilekeyword的作用就是提示vm:对于这个成员变量不能保存它的私有拷贝.而应直接与共享变量进行交互. 被volatile修饰符修饰的成员变量在每次被线程訪问时.都强迫从共享内存中重读该成员变量的值. 并且,当成员变量发生变化时.又强迫线程将变化了的值写回共享内存,这样在不论什么时刻.两个不同的线程总是看到某个成员变量的同一个值.这样当多…
volatile 修饰符,用于多线程同步 volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值.而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值. 一个 volatile 对象引用可能是 null. 使用 volatile 可以禁止 JVM 的指令重排,保证在多线程环境下也能正常运行.(出处:双重校验锁实现对象单例(线程安全))…
Synchronized 修饰符 Synchronized 关键字声明的方法同一时间只能被一个线程访问.Synchronized 修饰符可以应用于四个访问修饰符. 实例 public synchronized void showDetails() { ....... } Transient 修饰符 序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量. 该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型. 实例 public transi…
java中的修饰符分为类修饰符,字段修饰符,方法修饰符. 根据功能的不同,主要分为以下几种. 1.权限访问修饰符  访问权限的控制常被称为具体实现的隐藏 把数据和方法包进类中,以及具体实现的隐藏,常共同被称为封装 访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关 程序猿在修改和完善代码时,也有着巨大的压力.通常总会有一些消费者(或者客户端程序猿)需要你的代码在某些方面保持不变.因此你想改动代码,但是他们却想代码保持不变.所以就面对一个基本问题“如何把变动的事物和保持不变的事物区分开来” 所…
一.标识符 1.概念:标识符好比人和物的姓名,java中标识符就是类.对象.方法.变量.接口和自定义数据类型等等的名字. 2.规则: (1)首位不能是数字. (2)标识符对大小写敏感. (3)不可以是java中的关键字和保留字. (4)标识符字间不能有空格. (5)可由数字,字母和下划线(_),美元符号($)或人民币符号(¥)组成,中文也行,很国际化. (6)没有长度限制. (7)不能是true.false和null. 3.命名约定: (1)类和接口名:每个字的首字母大写,含有大小写.例如,My…
访问修饰符 default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符.使用对象:类.接口.变量.方法. private : 在同一类内可见.使用对象:变量.方法. 注意:不能修饰类(外部类) public : 对所有类可见.使用对象:类.接口.变量.方法 protected : 对同一包内的类和所有子类可见.使用对象:变量.方法. 注意:不能修饰类(外部类). 默认访问修饰符 使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的.接口里的变量都隐式声明为 public…
Java中各种修饰符与访问修饰符 类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被所有类访问(使用) public类必须定义在和类名相同的同名文件中 package 可以被同一个包中的类访问(使用) 默认的访问权限,可以省略此关键字,可以定义在和public类的同一个文件中 修饰符 名称 说明 备注 final 使用此修饰符的类不能够被继承 abstrac…
一.访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. 1.default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符.使用对象:类.接口.变量.方法. 2.private : 在同一类内可见.使用对象:变量.方法. 注意:不能修饰类(外部类) 3.public : 对所有类可见.使用对象:类.接口.变量.方法 4.protected : 对同一包内的类和所有子类可见.使用对象:变量.方法. 注意:不能修饰类(…
其实Java的protected修饰符,权限定义的很微妙,大致有以下几种: (1)protected控制符用于修饰方法和成员变量: (2)一个类的protected方法或成员变量,在包外是不能通过该类对象进行访问的,即便在该类的子类中也不可这么做: 在该类包外的子类中能访问的只是子类自己继承来的protected 方法和属性,即可以用super来访问: (3)在包外的子类中,不能用另外一个子类的对象访问父类中的protected变量,尽管这两个子类继承自同一个父类: (4)在包内,则可以: (5…