二、synchronized同步鎖


一、簡介

在Java多線程中,我們要實現同步串行最早接觸的就是synchronized關鍵字。

基本語法如下:

synchronized(鎖) {
    // 代碼塊
}

sychronized關鍵字的鎖主要有三種使用:

1)對象鎖

2)類鎖

3)字符串鎖

二、示例

一、對象鎖

最常見的寫法,synchronized寫在了成員方法上,這表示它以this為鎖,鎖的是當前對象

public synchronized void execute() {
        // 代碼
}

或者你也可以換一種寫法,降低鎖粒度

public void execute() {
        synchronized (this) {
            // 代碼塊
        }
    }

二、類鎖

靜態方法加鎖,那么鎖的是類

public static synchronized void execute() {
        // 代碼塊
    }

你也可以把類當作鎖

public void execute() {
        synchronized (SynchronizedDemo.class) {
            // 代碼塊
        }
    }

三、字符串

除了對象鎖,類鎖,Java還支持以一個字符串作為鎖。

這里注意,通常我們會和String的intern()方法一起用。intern()方法會將相同的值引用指向常量池的同一個內存塊,所以可以保證字符串值相同即鎖相同(即使值是由引用拼接的)。

private String id = "1";

    public void execute() {
        synchronized (id) {
            // 代碼塊
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM