class phone
public synchronized void call()
}
class test,"a").start();
// 捕獲
try catch (interruptedexception e)
new thread(()->,"b").start();
}}
// 兩個方法用的是同乙個鎖,排隊執行
class phone catch (interruptedexception e) system.out.println("發簡訊");
}public synchronized void call()
}
class test,"a").start();
// 捕獲
try catch (interruptedexception e)
new thread(()->,"b").start();
}}
結果如第一種,誰先搶到誰執行,後面的只能等
class phone catch (interruptedexception e) system.out.println("發簡訊");
}public void hello()
}
class test,"a").start();
// 捕獲
try catch (interruptedexception e)
new thread(()->,"b").start();
}}
普通方法不受鎖的影響,二者互不干擾
class phone
public synchronized void call()
}
class test,"a").start();
// 捕獲
try catch (interruptedexception e)
new thread(()->,"b").start();
}}
倆個物件倆把鎖,二者互不干擾
class phone
public static synchronized void call()
}
class test,"a").start();
// 捕獲
try catch (interruptedexception e)
new thread(()->,"b").start();
}}
情況如第一種,排隊執行,但此時鎖的物件是類的class物件
class phone
public static synchronized void call()
}
class test,"a").start();
// 捕獲
try catch (interruptedexception e)
new thread(()->,"b").start();
}}
情況如第一中,排隊執行,因為倆個物件都是乙個class物件
class phone
public static synchronized void call()
}
class test,"a").start();
// 捕獲
try catch (interruptedexception e)
new thread(()->,"b").start();
}}
靜態的同步方法 鎖的是 class 類模板
普通的同步方法 鎖的呼叫者,二把鎖互不干擾
class phone
public static synchronized void call()
}
class test,"a").start();
// 捕獲
try catch (interruptedexception e)
new thread(()->,"b").start();
}}
結果如上第七種,
synchronized 鎖的物件是方法的呼叫者!
八鎖現象(八鎖就是關於鎖的八個問題)
鎖 只會鎖兩個東西 物件 普通同步方法 class模板 靜態同步方法 package com.ji.lock8 import j a.util.concurrent.timeunit 八鎖就是關於鎖的八個問題 1.標準情況下,兩個執行緒先列印 發簡訊還是打 並不是先呼叫就先執行,是因為有鎖的存在 s...
有趣的8鎖問題
話不多說,直接上 資源類 class phone 同步方法 public synchronized void sms throws interruptedexception 測試類,定義兩個執行緒 public class test catch interruptedexception e a st...
多執行緒 三 關於鎖的8個問題
使用synchronized鎖 先發簡訊後打 原因 synchronized鎖的物件是方法的呼叫者,test1的物件都是phone,因為用的同一把鎖,所以誰先拿到誰先執行。public synchronized void sendsms catch interruptedexception e sy...