???????Java????????volatile
???????????? ???????[ 2013/3/19 10:15:08 ] ????????
??????????????????????volatile??????????????/д???????????volatile?????????÷?????????volatile???????????/д???????????????????????????Щ??????/д?????????????????????????????????????????????????????
class VolatileFeaturesExample {
volatile long vl = 0L; //???volatile????64λ??long?????
public void set(long l) {
vl = l; //????volatile??????д
}
public void getAndIncrement () {
vl++; //??????????volatile???????/д
}
public long get() {
return vl; //????volatile???????
}
}
?????????ж??????????????????????????????????????????????????????
class VolatileFeaturesExample {
long vl = 0L; // 64λ??long?????????
public synchronized void set(long l) { //?????????? ??????д???????????????
vl = l;
}
public void getAndIncrement () { //???????????
long temp = get(); //????????????????
temp += 1L; //???д????
set(temp); //???????????д????
}
public synchronized long get() {
//????????????????????????????????
return vl;
}
}
???????????????????????????volatile???????????/д??????????????????????/д?????????????????????????????????????Ч???????
??????????????happens-before????????????????????????????????????????????????ζ??????volatile?????????????????????????????????volatile???????д??
???????????????????????????????????о?????????????ζ??????64λ??long???double?????????????volatile???????????????д???????????????????volatile????????????volatile++??????????????Щ?????????????????????
????????????volatile????????????????????
?????? ???????????volatile?????????????????????????????????volatile???????д??
?????? ??????????????volatile???????/д??????????????????volatile++??????????????????????
????volatileд-????????happens before???
???????潲????volatile?????????????????????????volatile??????????????????volatile????????????????????????????????
??????JSR-133?????volatile??????д-????????????????????
?????????????????????volatile????????????????Ч????volatileд?????????????????????????壻volatile??????????????????????????塣
?????????????volatile?????????????
class VolatileExample {
int a = 0;
volatile boolean flag = false;
public void writer() {
a = 1; //1
flag = true; //2
}
public void reader() {
if (flag) { //3
int i = a; //4
……
}
}
}
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11