synchronized代碼塊具有volatile的同步功能

不多說,直接看例子,例子是最好的學(xué)習(xí)方法。

package other.thread8;

public class SyncDemo {

    private Boolean flag = true;

    public void run() {
        while (flag) {
        }
        System.out.println("已經(jīng)停止了!");
    }
    
    public void stop() {
        flag = false;
    }

}
package other.thread8;

public class ThreadA extends Thread {
    private SyncDemo demo;
    public ThreadA(SyncDemo demo) {
        this.demo = demo;
    }
    @Override
    public void run() {
        demo.run();
    }
}
package other.thread8;

public class ThreadB extends Thread {
    private SyncDemo demo;
    public ThreadB(SyncDemo demo) {
        this.demo = demo;
    }
    @Override
    public void run() {
        demo.stop();
    }
}
public class Test {

    public static void main(String[] args) {
        try {
            SyncDemo demo = new SyncDemo();
            ThreadA threadA = new ThreadA(demo);
            threadA.start();
            Thread.sleep(500);
            ThreadB threadB = new ThreadB(demo);
            threadB.start();
            System.out.println("已經(jīng)發(fā)起了停止命令!");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}
image.png

由此可見A線程和B線程flag值沒有可視性造成的,而關(guān)鍵字synchronized劇透可視性。

下面將SyncDemo改為:

public class SyncDemo {

    private Boolean flag = true;

    public void run() {
        String str = new String();
        while (flag) {
            synchronized (str) {
                
            }
        }
        System.out.println("已經(jīng)停止了!");
    }
    
    public void stop() {
        flag = false;
    }

}

打印結(jié)果:


image.png

關(guān)鍵字synchronized可以使多個線程訪問同一個資源具有同步性,而且它還具有將線程工作內(nèi)存中的私有變量與公共內(nèi)存中的變量同步的功能。

關(guān)鍵字synchronized可以保證在同一時刻,只有一個線程可以執(zhí)行某一個方法或某一個代碼塊。它包含兩個特性:互斥性和可見性。同步synchronized不禁可以解決一個線程看到對象處于不一致的狀態(tài),還可以保證進(jìn)入同步方法或者同步代碼塊的每個線程,都看到由同一個鎖保護(hù)之前所有的修改結(jié)果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容