多執行緒 同步函式使用的鎖是this

2021-06-22 17:40:27 字數 1371 閱讀 7132

同步函式用的是哪乙個鎖呢?

函式需要被物件呼叫。那麼函式都有乙個所屬物件引用。就是this。

所以同步函式使用的鎖是this。

通過程式進行驗證

需求:使用兩個執行緒來買票。乙個執行緒在同步**塊中。乙個執行緒在同步函式中。都在執行買票動作。

package com.tan;

class ticket implements runnable

catch(exception e){}

system.out.println(thread.currentthread().getname()+"....code : "+ tick--);}}

}} else

while(true)

show();

} public synchronized void show()//this

catch(exception e){}

system.out.println(thread.currentthread().getname()+"....show.... : "+ tick--);

} }}class thislockdemo

catch(exception e){}

t.flag = false;

t2.start();

}}

如果同步函式被靜態修飾後,使用的鎖是什麼呢?

通過驗證,發現不在是this。因為靜態方法中也不可以定義this。

靜態進記憶體時,記憶體中沒有本類物件,但是一定有該類對應的位元組碼檔案物件。

類名.class  該物件的型別是class

靜態的同步方法,使用的鎖是該方法所在類的位元組碼檔案物件。 類名.class

class ticket implements runnable

catch(exception e){}

system.out.println(thread.currentthread().getname()+"....code : "+ tick--);}}

}} else

while(true)

show();

} public static synchronized void show()

catch(exception e){}

system.out.println(thread.currentthread().getname()+"....show.... : "+ tick--);

} }}class staticmethoddemo

catch(exception e){}

t.flag = false;

t2.start();

}}

多執行緒之同步函式使用的是this鎖

同步函式用的是哪乙個鎖呢?函式需要被物件呼叫。那麼函式都有乙個所屬物件引用。就是this。所以同步函式使用的鎖是this。通過該程式進行驗證。使用兩個執行緒來買票。乙個執行緒在同步 塊中。乙個執行緒在同步函式中。都在執行買票動作。如果在加上同步的情況下還出現0號票 說明使用的兩個執行緒使用的不是同乙...

多執行緒 驗證同步函式的鎖是this

同步函式的使用的鎖是this 同步函式和同步 塊的區別 同步函式的鎖是固定的this。同步 塊的鎖是任意的物件。建議使用同步 塊。class ticket implements runnable catch interruptedexception e system.out.println thre...

多執行緒靜態同步函式的鎖是class 物件

通過驗證發現 同步函式如果被靜態修飾後,不再以this 為鎖 靜態進記憶體時,記憶體中沒有本類物件,但是一定有該類的位元組碼檔案物件 類名.class 該物件的型別是class 靜態的同步方法,使用的鎖是該方法所在類的位元組碼檔案物件。類名.class class ticket implements...