多執行緒的補充 關於類鎖和物件鎖的理解

2021-10-05 10:45:33 字數 1432 閱讀 9370

鎖什麼時候需要使用?概述:每個類建立的物件都對應一把鎖,如果是多個執行緒訪問不同物件的時候,其它執行緒不用等待鎖的釋放,因為它們是不同的鎖。

請看**。

public

class

test

}class

mythread

implements

runnable

//重寫run方法

public

void

run()}

class

account

public

double

getbalance()

public

void

drawmoney

(double money)

catch

(exception e)

} system.out.

println

(thread.

currentthread()

.getname()

+"取款成功"

+" 剩餘:"

+getbalance()

);}}

}

總結:每個物件對應一把鎖,只有有共同物件的執行緒才會等待鎖的釋放(這就是物件鎖)。

概述:類鎖和物件鎖不同,每個物件都有一把對應的鎖,而類鎖是乙個類只有一把鎖,類鎖和物件鎖的作用相同,也是使得執行緒同步執行,而非非同步執行。

類鎖會出現在**?

請看**。(這個例子是乙個多執行緒的面試題)

public

class

exam01

}class

mythread

extends

thread

public

void

run()if

(thread.

currentthread()

.getname()

.equals

("t2"))

}}class

myclass

catch

(interruptedexception e)

system.out.

println

("dosome over");

}public

synchronized

static

void

doother()

}

執行結果:需要等待執行緒t1的結束執行緒t2才可以執行。

總結:乙個類只有一把類鎖,當類鎖被占用的時候,只要是需要佔鎖執行的執行緒就必須等待類鎖的釋放才可以執行。

有用就好評,喜歡就點讚,持續關注,精彩不斷!

多執行緒的物件鎖和類鎖

今天面試官問了乙個問題,如果在乙個類中的普通方法加上synchronized 關鍵字,兩個執行緒可以同步方法這個方法嗎?為什麼 當時回答是不可以同步,然後面試官確認我說一定嗎?當時就知道回答錯了。現在實現了下,原來是類鎖和物件鎖的區別所在,也算是普及了下相關知識吧。類鎖 就是在方法前面加上 stat...

Java多執行緒 類鎖和物件鎖

我們設想某個執行緒獨佔某個類,必須執行完才能再次建立物件 預期輸出以下結果 物件鎖示例 關鍵字synchronized取得的鎖都是物件鎖,而不是把一段 方法 當做鎖,所以 中哪個執行緒先執行synchronized關鍵字的方法,哪個執行緒就持有該方法所屬物件的鎖 lock 在靜態方法上加synchr...

多執行緒 互斥物件和鎖

互斥物件的主要操作有兩個,即加鎖 lock 和解鎖 unlock 當乙個執行緒對互斥物件進行lock操作並成功獲得這個互斥物件的所有權,在此執行緒對此物件unlock前,其他執行緒對這個互斥物件的lock操作都會被阻塞。有些傾向需要對多個互斥物件進行加鎖,考慮下面的 std mutex mt1,mt...