Kuneng
2018-08-12 13:56
共享变量和volatile变量区别
共享变量是对于多线程而言的,多个线程访问同一个变量,需要先把他从主内存拷贝到自己的工作内存中,读写的操作都是在工作内存与主内存之间进行的,工作内存与工作内存之间无法交互。
volatile是为了保证线程A对于共享变量的修改,对其他线程B线程C是立即可见的。对于这一点,volatile符合两个规则:1.线程A在修改共享变量后将其同步到主内存中 2.线程BC在使用这个共享变量前,先从主内存刷新得到最新的值。所以很神奇,volatile变量在使用时总是能拿到最新的值。
共享变量是在多线程操作的情况下,对某一个变量都有进行操作,该变量存储在主存中,但是在多线程的工作内存中都有一个副本,所以该变量是共享的,即为共享变量。
volatile变量是被该关键字修饰的变量。在单线程中也可以用来修饰变量,但是没有意义。用在多线程中,是为了保证被其修饰的变量对于多线程来说都是内存可见的。
在多线程中,volatile用来修饰共享变量,实现共享变量的可见性。
我理解的是其实这个两种类型的变量在主内存中是一样的,只是在多线程的情况下,volatile修饰变量在线程操作前,会执行store和load方法,这样把主内存中的变量同步到了工作内存中。我自己的理解,不知道对不对。
细说Java多线程之内存可见性
55908 学习 · 74 问题
相似问题