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

2021-08-05 22:20:44 字數 950 閱讀 7995

/*

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

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

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

通過該程式進行驗證。

使用兩個執行緒來買票。

乙個執行緒在同步**塊中。

乙個執行緒在同步函式中。

都在執行買票動作。

如果在加上同步的情況下還出現0號票

說明使用的兩個執行緒使用的不是同乙個鎖

如何找問題:

1,明確哪些**是多執行緒執行**。

2,明確共享資料。

3,明確多執行緒執行**中哪些語句是操作共享資料的。

*/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();

// thread t3 = new thread(t);

// thread t4 = new thread(t);

// t3.start();

// t4.start();

}}

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

同步函式用的是哪乙個鎖呢?函式需要被物件呼叫。那麼函式都有乙個所屬物件引用。就是this。所以同步函式使用的鎖是this。通過程式進行驗證 需求 使用兩個執行緒來買票。乙個執行緒在同步 塊中。乙個執行緒在同步函式中。都在執行買票動作。package com.tan class ticket impl...

多執行緒之執行緒同步

pulse lockobj 表示釋放當前被lock的lockobj,容許其他執行緒呼叫。相當於暫時掛起當前執行緒 wait lockobj 表示等待當前被其他執行緒占用的lockobj。下面的 將會交替執行兩個執行緒 class ticktock console.write tick monitor...

多執行緒之靜態同步函式 方法

如果同步函式被靜態修飾後,使用的鎖是什麼呢?通過驗證,發現不在是this。因為靜態方法中也不可以定義this。靜態進記憶體是,記憶體中沒有本類物件,但是一定有該類對應的位元組碼檔案物件。類名.class 該物件的型別是class 靜態的同步方法,使用的鎖是該方法所在類的位元組碼檔案物件。類名.cla...