JUC 04 鎖的8個問題

2021-10-08 21:44:47 字數 4253 閱讀 4414

鎖的8個問題目標就是分析鎖是誰,以及執行緒操作資源類的流程分析。

兩個執行緒分別操作同乙個資源類物件的兩個同步方法。

資源類:

class

person

public

synchronized

void

drink()

}

執行緒操作資源類:

public

class

question

,"a執行緒").

start()

; timeunit.seconds.

sleep(1

);newthread((

)->

,"b執行緒").

start();}}

執行結果:

分析:1、問:鎖是誰?

答:鎖是物件p

兩個執行緒分別操作同乙個資源類物件的兩個同步方法。和情況一的區別在於其中乙個方法有延遲。

資源類:

class

person

catch

(interruptedexception e)

}public

synchronized

void

drink()

}

執行緒操作資源類:

public

class

question

}

執行結果:

分析:1、問:鎖是誰?

答:鎖是物件p

兩個物件分別操作同乙個資源類物件,乙個呼叫同步方法,乙個呼叫非同步方法。

資源類:

class

person

catch

(interruptedexception e)

}public

void

drink()

}

執行緒操作資源類:

public

class

question

}

運**況:

分析:1、問:鎖是誰?

答:鎖是物件p

兩個執行緒分別操作不同的資源類物件,都呼叫同步方法。

資源類:

class

person

catch

(interruptedexception e)

}public

synchronized

void

drink()

}

執行緒操作資源類:

public

class

question

}

執行結果:

分析:1、問:鎖是誰?

答:鎖是物件p1p2

兩個執行緒訪問乙個資源類物件的兩個靜態同步方法。

資源類:

class

person

catch

(interruptedexception e)

}public

static

synchronized

void

drink()

}

執行緒操作資源類:

public

class

question

,"a執行緒").

start()

; timeunit.seconds.

sleep(1

);newthread((

)->

,"b執行緒").

start();}}

執行結果:

分析:1、問:鎖是誰?

答:鎖是 class 物件person

兩個執行緒訪問兩個資源類物件的兩個靜態同步方法。

資源類:

class

person

catch

(interruptedexception e)

}public

static

synchronized

void

drink()

}

執行緒操作資源類:

public

class

question

,"a執行緒").

start()

; timeunit.seconds.

sleep(1

);newthread((

)->

,"b執行緒").

start();}}

執行結果:

分析:1、問:鎖是誰?

答:鎖是 class 物件person

兩個執行緒分別操作乙個資源類物件,乙個操作靜態同步方法,乙個操作普通同步方法。

資源類:

class

person

catch

(interruptedexception e)

}public

synchronized

void

drink()

}

執行緒操作資源類:

public

class

question

,"a執行緒").

start()

; timeunit.seconds.

sleep(1

);newthread((

)->

,"b執行緒").

start();}}

執行結果:

分析:1、問:鎖是誰?

答:鎖是 class 物件person和例項物件p1

兩個執行緒分別操作兩個個資源類物件,乙個執行緒操作靜態同步方法,乙個執行緒操作普通同步方法。

資源類:

class

person

catch

(interruptedexception e)

}public

synchronized

void

drink()

}

執行緒操作資源類:

public

class

question

,"a執行緒").

start()

; timeunit.seconds.

sleep(1

);newthread((

)->

,"b執行緒").

start();}}

執行結果:

分析:1、問:鎖是誰?

答:鎖是 class 物件person和例項物件p2

8鎖,就是關於鎖的8個問題

class phone public synchronized void call class test,a start 捕獲 try catch interruptedexception e new thread b start 兩個方法用的是同乙個鎖,排隊執行 class phone catch...

JUC介紹 鎖的理解 4組問題闡述鎖

1.標準情況下 sendmsg沒有延遲 兩個執行緒先列印發簡訊還是打 結果 先列印發簡訊 2.sendmsg延遲4秒的情況下,兩個執行緒先列印發簡訊還是打 結果 先列印發簡訊 解答 這種情況並不是因為 書寫順序的原因,而是因為有鎖的存在 synchronized鎖的物件是方法的呼叫者phone,而兩...

有趣的8鎖問題

話不多說,直接上 資源類 class phone 同步方法 public synchronized void sms throws interruptedexception 測試類,定義兩個執行緒 public class test catch interruptedexception e a st...