首先:volatile是变量修饰符,而synchronized则作用于一段代码或方法;
1:例如int geti1() {return i1;}
由于每个线程可以有它自己的变量拷贝,而这个变量拷贝值可以和“主”内存区域里存放的不同。导致存在一种可能:“主”内存区域里的i1值是1,线程1里的 i1值是2,线程 2里的i1值是3——这在线程1和线程2都改变了它们各自的i1值,而且这个改变还没来得及传递给“主”内存区域或其他线程时就会发生。
2:volatile int i2; int geti2() {return i2;}
geti2()得到的是“主”内存区域的i2数值。volatile的含义就是告诉处理器, 不要将我放入工作内存, 请直接在主存操作我。因此,当多线程同时访问该变量时,都将直接操作主存,从本质上做到了变量共享。但是,volatile修饰的变量存取时比一般变量消 耗的资源要多一点,因为线程有它自己的变量拷贝更为高效。
volatile用法总结
最新推荐文章于 2022-04-20 13:06:47 发布