多執行緒 執行緒互斥之synchronized 詳解

2021-07-16 17:45:02 字數 2187 閱讀 2833

定義:

執行緒互斥是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。

我們都知道保證執行緒完整執行。則需要對其加鎖。使用synchronized關鍵字。在這裡鎖的物件理論上可以為任何物件。

**塊同步:

public

void

output(string name)

system.out.println(); }}

方法同步:

在方法前直接加關鍵字synchronized。

public synchronized void output2(string name)

system.out.println();

}注意:該方法鎖的是this物件,也就是當前類的例項。

靜態方法加鎖

public

static synchronized void

output3(string name)

system.out.println();

}

注意:該方法鎖的是該方法所在的類本身(並非例項)。

以上有這三種用synchronized 的方式。如果我要同時保證方式一和方式二能夠同步。則必須保證,兩個方法鎖的是用乙個物件。也就是方式一要用synchronized (this)。加入這時你換成synchronized (obj)那就沒有意義了。

當然也要必須保證兩個方法都是在同乙個類下呼叫。如果

outputer outputer1=new outputer();

outputer outputer2=new outputer();

然後用outputer1,outputer2分別呼叫兩種方式,那也起不到鎖的作用了。

即:類的同乙個例項下,並鎖的是同乙個物件。才能達到互斥的效果。

同理,由於方式三是鎖的類的本身,所以如果方式一和方式三若想同步的話也要鎖住類的本身。假如我們還應用synchronized (this),我做了乙個測試。

private void init() catch (exception e)

outputer.output3("方法三mdm");}}

}).start();

new thread(new runnable() catch (exception e)

outputer.output("方法一mdm");}}

}).start();

}

public

static

void

main(string args)

會發現結果出現了異常。該靜態方法並沒有得到鎖的保護。兩個方法沒有實現同步互斥。

因為在靜態方法中synchronized 是鎖的類本身。因此在方式一種也要鎖類的本身。例項化出來的物件是沒用的。可以鎖住類的位元組碼物件。即

synchronized (outputer.class)

有了上面的介紹,在給大家出個題。

pulbic class something()

public

synchronized

void

issyncb(){}

public

static

synchronized

void

csynca(){}

public

static

synchronized

void

csyncb(){}

}

那麼,加入有something類的兩個例項a與b,那麼下列組方法何以被1個以上執行緒同時訪問呢

a.   x

.issynca()與x

.issyncb()

b. x

.issynca()與y

.issynca()

c. x

.csynca()與y

.csyncb()

d. x

.issynca()與something.csynca()

多執行緒同步之互斥物件

一 互斥物件屬於核心物件,它能夠確保執行緒擁有對單個資源的互斥訪問權。互斥物件包含乙個使用數量 乙個執行緒id 乙個計數器 其中id標識了當前哪個執行緒擁有互斥物件,計數器用於表明該執行緒擁有互斥物件的次數。當該執行緒擁有互斥物件的次數為0時,表明該執行緒釋放了互斥物件的所有權,互斥物件處於有訊號狀...

多執行緒互斥之Dekker演算法

當併發執行緒競爭使用同乙個資源時,它們互相之間會發生衝突,我們可以把這種情況簡單描述如下 兩個或更多的執行緒在它們的執行過程中需要訪問乙個資源,每個程序並不知道其他執行緒的存在,並且每乙個執行緒也不受其他執行緒的影響。每個執行緒都不影響它所使用的資源的狀態,這類資源包括i o裝置 儲存器 處理器時間...

多執行緒同步之互斥鎖

對於多執行緒程式來說,同步是指在一定的時間內只允許某乙個執行緒訪問某個資源 而在 此時間內,不允許其他的執行緒訪問該資源。同步資源的方式 互斥鎖 條件變數 讀寫鎖 訊號量。下面介紹下互斥鎖 將互斥鎖想象成乙個只能容納乙個人的洗手間,當某個人進入洗手間的時候,可以從 裡面將洗手間鎖上,其他人只能在互斥...