三、synchronized同步鎖
阿新 • • 發佈:2018-12-23
一、簡介
在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) { // 程式碼塊 } }