volatile使用场景 static和Volatile的区别?
static和Volatile的区别?
变量被放在主内存中,每个使用变量的线程都会将一个副本从主内存复制到自己的工作区进行操作。
JAVA内存模型负责保持主内存区域中字段的值与每个线程的工作区同步,即保持一致。
Static:声明此字段是静态的(可能由多个实例共享)。在主存中,这个类的所有实例的这个字段都是同一个变量,即唯一性。
Volatile,声明变量值的一致性;static,声明变量的唯一性。
另外,volatile同步机制不同于synchronized,前者是内存同步,后者不仅包括内存同步(一致性),还保证线程互斥(互斥)。
Static只声明主存变量的唯一性,不能保证工作区变量值与主存变量值的一致性。除非变量的值是不可变的,即使用final修饰符,否则static声明的变量不是线程安全的。
以下内容摘自Java语言规范的官方解释:
1)如果一个字段被声明为静态的,那么该字段实际上只存在一个条目,而不管可以创建多少个类实例(可能为零)。
2)一个字段可能被声明为volatile,在这种情况下,Java内存模型保证所有线程都会看到变量的一致值。
volatile应用在什么场景?
Volatile有五种使用场景:1。作为状态标志
2。一次性安全释放
3。独立观察
4。易失bean模式
5。低成本读写锁定策略
volatile使用场景 volatile用法 volatile使用
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。