2016 - 2024

感恩一路有你

volatile关键字用法 static和Volatile的区别?

浏览量:2413 时间:2021-03-12 13:00:31 作者:admin

static和Volatile的区别?

变量被放在主内存中,每个使用变量的线程都会将一个副本从主内存复制到自己的工作区进行操作。

JAVA内存模型负责保持主内存区域中字段的值与每个线程的工作区同步,即保持一致。

Static:声明此字段是静态的(可能由多个实例共享)。在主存中,这个类的所有实例的这个字段都是同一个变量,即唯一性。

Volatile,声明变量值的一致性;static,声明变量的唯一性。

另外,volatile同步机制不同于synchronized,前者是内存同步,后者不仅包括内存同步(一致性),还保证线程互斥(互斥)。

Static只声明主存变量的唯一性,不能保证工作区变量值与主存变量值的一致性。除非变量的值是不可变的,即使用final修饰符,否则static声明的变量不是线程安全的。

以下内容摘自Java语言规范的官方解释:

1)如果一个字段被声明为静态的,那么该字段实际上只存在一个条目,而不管可以创建多少个类实例(可能为零)。

2)一个字段可能被声明为volatile,在这种情况下,Java内存模型保证所有线程都会看到变量的一致值。

java中volatile和synchronize的区别和比较?

1。Volatile是线程同步的轻量级实现,因此Volatile的性能优于synchronize;Volatile只能用来修改变量,synchronize可以用来修改方法和代码块。随着JDK技术的发展,同步在执行效率上会有很大的提高,所以同步在项目的过程中还是比较普遍的。对volatile的多线程访问将不会阻塞;而同步将阻塞;

3。Volatile可以保证私有内存和主内存之间变量的同步,但不能保证变量的原子性;同步可以保证变量的原子性;

4。Volatile是多线程间变量的可见性;synchronize是多线程间访问资源的同步;对于Volatile修改的变量,可以解决读取时变量的可见性问题,但不能保证原子性。对于多线程访问同一实例变量,需要锁同步。

volatile关键字用法 volatile修饰的变量 volatile用法

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。