第七天學習多執行緒同步和鎖

2022-09-01 09:42:13 字數 1466 閱讀 4228

當多個執行緒訪問同乙個物件,並且執行緒還想修改物件,這時候就需要執行緒同步,執行緒同步其實就是乙個等待機制,多個需要訪問此物件的執行緒進入物件的等待池形成佇列,等待前乙個執行緒使用完畢,下乙個執行緒再使用。

public synchronized void method(){}
怎麼判斷該鎖誰!
package syn;

//不安全取錢

//兩個人去銀行取錢

//銀行需要賬戶

public class unsafebank

}//賬戶

class account

}//銀行:模擬取款

class drawing extends thread

@override

public void run()

try catch (interruptedexception e)

account.money = account.money-drawingmoney;

nowmoney = nowmoney +drawingmoney;

system.out.println(account.name+"餘額為:"+account.money);

system.out.println(thread.currentthread().getname()+"手裡的錢:"+nowmoney);}}

}

package syn;

//死鎖:多個執行緒互相抱著對方需要的資源,然後形成僵持

public class deadlock

}//口紅

class lipstick

//鏡子

class mirror

class makeup extends thread

@override

public void run() catch (interruptedexception e)

}//互相持有對方的鎖(需要拿到對方的資源)

private void makeup() throws interruptedexception

}} else }}

}}

只要解決以上一條即可避免死鎖(鎖不能巢狀鎖!)

reentrantlock(可重入鎖)類實現了lock

class a finally

}}

synchronized與lock對比

lock是顯式鎖,手動開啟後需要關閉,synchronized是隱式鎖,出了作用域自動釋放。

lock只有**塊鎖,synchronized有**塊鎖和方法鎖。

lock鎖效能更好,jvm花費的排程時間更少,效能和擴充套件性都更好。

優先使用順序:lock>synchronized**塊》synchronized方法鎖

第七天學習

練習題 1 以下類定義中哪些是類屬性,哪些是例項屬性?class c num 0 def init self self.x 4 self.y 5 c.count 62 怎麼定義私有 法?3 嘗試執行以下 並解釋錯誤原因 4 按照以下要求定義乙個遊樂園門票的類,並嘗試計算2個 1個小孩平日票價。要求 ...

Java學習第七天

類成員 static成員 當使用例項來訪問類成員時,系統底層依然是委託該類來訪問類成員。因此,即便該類例項為null,她依然可以訪問所屬類的類成員。例如 package lesson5 單例模式 singleton 主要通過靜態變數 靜態方法和private構造方法完成。例如 package les...

C 學習第七天

c 中的params引數 引數陣列 1 params引數是陣列。呼叫方式可以陣列方式,也可以單個元素方式。static void test string name,params int scores console.writeline 你好,你的scores is name,sb test 劉德華 ...