各位老铁们,大家好,今天由我来为大家分享18may20JAVA,以及static和Volatile的区别的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
本文目录
Vert.x未来会取代tomcat和现在流行的spring全家桶吗
https://www.mayi888.com/archives/69889
将来还是微服务为主,编译成原生代码,减少资源占用。
static和Volatile的区别
变量放在主存区上,使用该变量的每个线程,都将从主存区拷贝一份到自己的工作区上进行操作。
volatile,声明这个字段易变(可能被多个线程使用),Java内存模型负责各个线程的工作区与主存区的该字段的值保持同步,即一致性。
static,声明这个字段是静态的(可能被多个实例共享),在主存区上该类的所有实例的该字段为同一个变量,即唯一性。
volatile,声明变量值的一致性;static,声明变量的唯一性。
此外,volatile同步机制不同于synchronized,前者是内存同步,后者不仅包含内存同步(一致性),且保证线程互斥(互斥性)。
static只是声明变量在主存上的唯一性,不能保证工作区与主存区变量值的一致性;除非变量的值是不可变的,即再加上final的修饰符,否则static声明的变量,不是线程安全的。
下面摘自Java语言规范(JavaLanguageSpecification)的官方解释:
1)Ifafieldisdeclaredstatic,thereexistsexactlyoneincarnationofthefield,nomatterhowmanyinstances(possiblyzero)oftheclassmayeventuallybecreated.
2)Afieldmaybedeclaredvolatile,inwhichcasetheJavaMemoryModelensuresthatallthreadsseeaconsistentvalueforthevariable。
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!