java synchronized同步方法呼叫另乙個同步方法,鎖機制問題

時間 2021-05-06 19:23:28

1樓:曹非

private

static

Vector

>v=newVector

>();

public

static

void

main

(String

args

)Threadrt=

newThread

(new

Runnable()}

});Threadpt=

newThread

(new

Runnable()}

catch

(Exceptione)

}});rt.

start

();pt

.start

();while

(Thread

.activeCount

()>20);}}

2樓:簡單的程式設計師

補充一點,static 方法是鎖住的Foo.Class,也就是位元組碼。static synchronized a()與static a()}是等價的。

3樓:

加在非static方法上的synchronized方法是和synchronized(this)塊等價的,均為物件鎖,即對this加鎖。

獲得當前物件鎖的執行緒,可以繼續獲得當前物件鎖,JVM負責跟蹤物件被加鎖的次數。執行緒執行B方法,此時如果this鎖可以用,執行緒獲得該鎖,執行緒給物件加鎖,計數器變成1,然後B方法呼叫A方法,由於是對同乙個物件同乙個執行緒,執行緒可以繼續獲得鎖,計數器變為2,表示this被加鎖2次。A方法完畢後,執行緒釋放鎖,計數器變為1,此時物件鎖對其他執行緒依然是不可獲得的。

B方法完畢後,執行緒繼續釋放鎖,此時計數器變為0,表示鎖被完全釋放,其他執行緒可以獲得物件鎖。

4樓:beralee

要明白兩個問題,1.鎖的物件是誰,2.誰持有了鎖。

假設方法A和B是在同乙個類Test中的兩個方法。

Test t=new Test();

t.methodB();

這個時候,methodB方法被呼叫時,因為加了synchronized ,需要先獲得乙個鎖,這個鎖的物件應該是t,也就是當前的這個Test類的例項,而獲得鎖的東西是執行緒,也就是說當前執行緒拿到了t的鎖(而不是你說的B方法獲得鎖),這個時候B方法內呼叫methodA,因為A也加了synchronized,也需要獲得乙個鎖,因為A和B都是Test類中的方法,所以當前執行緒要獲得的鎖的物件也是t。由於當前執行緒在執行B方法時已經持有了t物件的鎖,因此這時候呼叫methodA是沒有任何影響的,相當於方法A上沒有加synchronized。

另一種情況:假設現在有兩個Test類

Test t1=new Test();

Test t2=new Test();

t1.methodB();//此時當前執行緒持有了t1物件的鎖

t2.methodB();//此時當前執行緒也持有了t2物件的鎖

當前執行緒持有了兩把鎖,鎖的物件分別是兩個不同的Test類的例項t1和t2,互相沒有影響。

再一種情況:假設在多執行緒環境下,兩個執行緒都可以訪問Test t=new Test();

此時假設thread1裡呼叫t.methodB();同時thread2裡呼叫t.methodB()

這時假設thread1先搶到t物件的鎖,那麼thread2需要等待thread1釋放t物件的鎖才可以執行B方法。

結果像這樣:

thread1獲得t的鎖--thread1執行methodB--thread1執行methodA--釋放t的鎖---thread2獲得t的鎖--thread2執行methodB--thread2執行methodA--釋放t的鎖。

synchronized還有很多種使用方法,但只有明白是那條執行緒獲得哪個物件的鎖,就很容易明白了。

python 乙個類的函式如何呼叫另乙個類中函式的返回值?

我覺得大概有這麼幾種辦法。最簡單的一種是給subFrame的建構函式新增乙個引數 class subframe wx Frame def init self parent self parent parent class mainframe wx Frame def open subframe se...

假如平行宇宙存在,有什麼方法可以和另乙個世界的自己取得聯絡,哪怕是心靈上的感應?

葛利馬 既然你覺得那個世界的那個人就是你自己,那你去聯絡他幹嘛?自己跟自己聊天不也一樣嗎?如果非要求有個對話的儀式感,那也很簡單,去把siri的語音包換成自己的,就能自己跟自己聊了! 瘋船長 在這我假定一下幾種可行的交集方法 1.夢境 眾所周知夢境中的大部分事物是我們所沒見過或者預料或者遇見過的,很...

乙個男生刪了另乙個男生兩次!另乙個男生還回來加他(說是喜歡他)能相信嗎?

hhhhh張 w很敏感沒有安全感是不是 那麼要想清楚,如果和x在一起或者更多接觸然後喜歡的太深了後果會怎麼樣如果只是對x有些好感或者不喜歡又覺得x不可靠那就不要嘗試了吧但是如果很喜歡x只是覺得配不上,那不妨試試?只要考慮清楚,能不能做到自己在乎對方更多 不要後悔就好 Yking 嗯,喜不喜歡不是靠這...