鎖(只會鎖兩個東西=》(物件(普通同步方法),class模板(靜態同步方法)))
package com.ji.lock8;
import j**a.util.concurrent.timeunit;
/* * 八鎖就是關於鎖的八個問題
* 1. 標準情況下,兩個執行緒先列印 發簡訊還是打**(並不是先呼叫就先執行,是因為有鎖的存在)
* * synchronized 鎖的物件是方法的呼叫者
* 兩個方法用的是同乙個鎖,誰先拿到誰執行
* 2. 標準情況下,兩個執行緒先列印 發簡訊還是hello
* * hello方法沒有鎖,不是同步方法不受鎖的影響
* 3. 標準情況下,兩個物件各自乙個執行緒執行,先列印 發簡訊還是打**
* * synchronized 鎖的物件是方法的呼叫者(有兩個呼叫者兩把鎖)
* 4. 增加兩個靜態的同步方法,先列印 發簡訊還是打**
* * static靜態類,只要類一載入就有了!鎖的是class模板(phone3.class(乙個類只有乙個class物件)全域性唯一)
* 5. 兩個物件,增加兩個靜態的同步方法,先列印 發簡訊還是打**
* * 還是先列印發簡訊,因為無論多少個物件都只有乙個class模板(兩個物件,只有乙個class類模板)
* 6. 乙個普通的同步方法,乙個靜態的同步方法 乙個物件 先列印 發簡訊還是打**
* * 鎖的東西不是乙個普通的同步方法鎖的是呼叫者,靜態的同步方法鎖的是類模板
* 7. 乙個普通的同步方法,乙個靜態的同步方法 兩個物件 先列印 發簡訊還是打***/
public class test4 catch (interruptedexception e)
},"a").start();
timeunit.seconds.sleep(1);
new thread(()->,"b").start();
}}class phone4
public synchronized void call()
//hello方法沒有鎖,不是同步方法不受鎖的影響
public void hello()
}
JUC 八鎖現象
由鎖引發的8個問題 同一物件,兩個同步方法,哪個先行?同一物件,兩個同步方法,先被呼叫的執行前鎖住2s,哪個先行?乙個物件,乙個同步,乙個普通方法,哪個先行?兩個物件,分別呼叫兩個同步方法,先被呼叫的執行前鎖住2s,哪個先行?增加兩個靜態同步方法,哪個先行?兩個物件,分別呼叫兩個靜態同步方法,哪個先...
JUC 執行緒八鎖
1,乙個物件裡面如果有多個synchronized方法,某乙個時刻內,只要乙個執行緒去呼叫其中的乙個synchronized方法了,其它的執行緒都只能等待,換句話說,某乙個時刻內,只能有唯一乙個執行緒去訪問這些synchronized方法。2,鎖的是當前物件this,被鎖定後,其它的執行緒都不能進入...
JUC 執行緒八鎖
package org.meng.juc 題目 判斷列印 one or two 1.兩個普通同步方法,兩個執行緒 標準列印,列印?one two 2.新增thread.sleep 3000 給getone 列印?3s 後列印 one two 3.新增普通方法 getthreee 列印?先列印thre...