1.volatile关键字用于声明变量
Java有个思想叫“主”内存区域,这里存放了变量目前的“准确值”。每个线程可以有它自己的变量拷贝,而这个变量拷贝值可以和“主”内存区域里存放的不同。因此实际上存在一种可能:“主”内存区域里的i1值是1,线程1里的i1值是2,线程2里的i1值是3——这在线程1和线程2都改变了它们各自的i1值,某个线程对i1变量的改变也没有传递给其他线程和主内存区域。 而 geti2()得到的是“主”内存区域的i2数值。用volatile修饰后的变量不允许有不同于“主”内存区域的变量拷贝(换句话说,一个变量经 volatile修饰后在所有线程中必须是同步的:任何线程中改变了它的值,所有其他线程立即获取到了相同的值)(理所当然的,volatile修饰的变量存取时比一般变量消耗的资源要多一点,因为线程有它自己的变量拷贝更为高效)
1 int i1; 2 int geti1() {return i1;} 3 volatile int i2; 4 int geti2(){return i2;} 5 int i3; 6 synchronized int geti3() {return i3;}
浙公网安备 33010602011771号