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