Java多執行緒 鎖物件

2021-08-20 11:44:38 字數 1370 閱讀 4156

前面總結了多個執行緒訪問同乙個物件的同步方法以同步執行,多個執行緒訪問多個物件的同步方法則以非同步方式執行,那如果多個執行緒分別訪問乙個物件中同步方法和非同步方法會如何執行那?

demo:

myobject類(包含了乙個同步方法和乙個非同步方法):

public

class myobject catch (interruptedexception e)

}public

void

methodb()catch (interruptedexception e)

}}

兩個執行緒類threada1和threadb1,分別呼叫methoda和methodb:

public

class

threada1

extends

thread

@override

public

void

run()

}

public

class

threadb1

extends

thread

@override

public

void

run()

}

main方法,呼叫同乙個物件的方法:

public

class run

}

執行結果:

begin  methoda threadname=a

begin methodb threadname=bbegin time=1528106855775

endend

endtime=1528106860775

由結果可知,雖然執行緒a1先持有了object物件的鎖,但執行緒b1完全可以非同步呼叫非synchronized型別的方法。

如果methob()方法前加上synchronized關鍵字那?

執行結果:

begin  methoda threadname=a

endend

time=1528109860336

begin methodb threadname=bbegin time=1528109860336

end

前面兩個實驗可以得出結論:

1、a執行緒先持有object物件的lock鎖,b執行緒可以以非同步的方式呼叫object物件中的非synchronized型別的方法。

2、a執行緒先持有object物件的lock鎖,b執行緒如果在這時呼叫object物件中的synchronized型別的方法需要等待,也就是同步。

Java多執行緒 類鎖和物件鎖

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

java多執行緒同步之物件鎖區分

多執行緒同步 多個執行緒共同協作正確的執行任務。我們經常見到多執行緒同步關鍵字synchronized,那它到底是利用誰做同步鎖呢。要想實現多執行緒同步,必須要保證同步鎖是共享唯一的。synchronized一般用於3中場景 1.非靜態方法 2.靜態方法 3.塊 一 非靜態方法 同步鎖指當前方法所在...

java多執行緒 執行緒八鎖

乙個物件裡面如果有多個synchronized方法,某乙個時刻內,只要乙個執行緒去呼叫其中的乙個synchronized方法了,其它的執行緒都只能等待,換句話說,某乙個時刻內,只能有唯一乙個執行緒去訪問這些synchronized方法鎖的是當前物件this,被鎖定後,其它的執行緒都不能進入到當前物件...