juc學習備忘錄 執行緒八鎖

2021-10-06 10:22:03 字數 1812 閱讀 8707

package com.wyz.juc;

/** * 執行緒八鎖

* 題目:判斷列印的「one" or 」two「?

* 1. 兩個普通同步方法,兩個執行緒,標準列印,列印? //one two

* 2.新增tread.sleep()給getone 列印? //one two

* 3.新增普通的getthree 列印? //three one two

* 4.兩個普通的同步方法,兩個numberdemo物件,列印? //two one

* 5.修改 getone()為靜態同步方法 ,乙個numberdemo物件 //two one

* 6.修改 兩個為靜態同步方法 ,乙個numberdemo物件 //one two

* 7.乙個靜態同步方法,乙個非靜態同步方法,兩個numberdemo物件 //two one

* 8.兩個靜態物件,兩個同步方法? //one two

* * 執行緒八鎖的關鍵:

* ①.非靜態方法的鎖預設為this,靜態方法的鎖為對應的class例項

* ②某一時刻內,只能有乙個執行緒持有鎖,無論幾個方法

* ** •乙個物件裡面如果有多個synchronized方法,某乙個時刻內,只要乙個執行緒去呼叫

* 其中的乙個synchronized方法了,其它的執行緒都只能等待,換句話說,某乙個時刻

* 內,只能有唯一乙個執行緒去訪問這些synchronized方法

* • 鎖的是當前物件this,被鎖定後,其它的執行緒都不能進入到當前物件的其它的synchronized方法

* • 加個普通方法後發現和同步鎖無關

* • 換成兩個物件後,不是同一把鎖了,情況立刻變化。

* • 都換成靜態同步方法後,情況又變化

* • 所有的非靜態同步方法用的都是同一把鎖——例項物件本身,也就是說如果乙個實

* 例物件的非靜態同步方法獲取鎖後,該例項物件的其他非靜態同步方法必須等待獲

* 取鎖的方法釋放鎖後才能獲取鎖,可是別的例項物件的非靜態同步方法因為跟該實

* 例物件的非靜態同步方法用的是不同的鎖,所以毋須等待該例項物件已獲取鎖的非

* 靜態同步方法釋放鎖就可以獲取他們自己的鎖。

* • 所有的靜態同步方法用的也是同一把鎖——類物件本身,這兩把鎖是兩個不同的對

* 象,所以靜態同步方法與非靜態同步方法之間是不會有競態條件的。但是一旦乙個

* 靜態同步方法獲取鎖後,其他的靜態同步方法都必須等待該方法釋放鎖後才能獲取

* 鎖,而不管是同乙個例項物件的靜態同步方法之間,還是不同的例項物件的靜態同

* 步方法之間,只要它們同乙個類的例項物件

* @author wangchong

*/public

class

testthread8monitor})

.start()

;new

thread

(new

runnable()

}).start()

;// new thread(new runnable()

// }).start();}}

class

numberdemo

catch

(interruptedexception e)

}public

synchronized

void

gettwo()

public

void

getthree()

}

JUC 執行緒八鎖

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

JUC 執行緒八鎖

package org.meng.juc 題目 判斷列印 one or two 1.兩個普通同步方法,兩個執行緒 標準列印,列印?one two 2.新增thread.sleep 3000 給getone 列印?3s 後列印 one two 3.新增普通方法 getthreee 列印?先列印thre...

jquery學習備忘錄

語法解釋 1.select id change function 為select新增事件,當選擇其中一項時觸發 2.var checktext select id find option selected text 獲取select選擇的text 3.var checkvalue select id...