??????????????????????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
            ……
        }
    }
}