2、synchronized同步鎖

1、簡介

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

基本語法以下:this

synchronized(鎖) {
    // 代碼塊
}

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

1)對象鎖線程

2)類鎖code

3)字符串鎖對象

2、示例

1、對象鎖

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

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

或者你也能夠換一種寫法,下降鎖粒度內存

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

2、類鎖

靜態方法加鎖,那麼鎖的是類字符串

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

你也能夠把類看成鎖同步

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

3、字符串

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

這裏注意,一般咱們會和String的intern()方法一塊兒用。intern()方法會將相同的值引用指向常量池的同一個內存塊,因此能夠保證字符串值相同即鎖相同(即便值是由引用拼接的)。

private String id = "1";

    public void execute() {
        synchronized (id) {
            // 代碼塊
        }
    }
相關文章
相關標籤/搜索