/**
* datetime 2020/11/25 21:14
* * @author db
**/public class concurrency
private static void lockcode()
private static void lockmethod()
//鎖的是物件例項方法,同一物件是同步的,不同物件是非同步的
lockgeneralmethod();
//2、修飾靜態方法:synchronized static methodname(){}
//鎖的是類方法,無論多少個例項物件,都是同步的
lockstaticmethod();
//多普通方法加鎖,混合呼叫
//鎖的是例項,同一物件是同步的
lockmoremethod();
//類鎖和物件鎖同時呼叫
//因為不是同一把鎖,所以是非同步的
lockgeneralandstatic();
}private static void deadlock()
}}, "threade");
thread threadf = new thread(()->
}}, "threadf");
threade.start();
threadf.start();
}private static void lockmember()
}, "threade");
thread threadf = new thread(()->
}, "threadf");
threade.start();
threadf.start();
}private static void lockthis()
private static void lockthisclass()
private static void lockgeneralmethod()
private static void lockstaticmethod()
private static void lockmoremethod()
private static void lockgeneralandstatic()
}class obja
public void run(string thread)
public synchronized void addvalue()
public synchronized void subvalue()
}class objc
public void run(string thread)
public synchronized void addvalue()
public synchronized void subvalue()
private void print()
}public void lockmember()
public void lockobj()
}public void lockthisclass()
}public synchronized void lockmethod()
public synchronized static void lockstaticmethod()
}public synchronized void lockmoremethod1()
public synchronized void lockmoremethod2()
public synchronized void lockmoremethod3()
}
場景二 synchronized修飾方法
相對於場景一 synchronized包裹 塊,synchronized修飾方法的場景要簡單明朗許多。因為無論被修飾的方法是靜態還是成員,執行緒訪問它時它都只能指定特定的鎖。而不像synchronized包裹 塊場景下,類a的物件a即可以指定自己為鎖,也可以指定類b的物件b為鎖,也可以指定類a對應的...
基於synchronized修飾靜態和非靜態方法
前言 synchronized修飾非靜態方法 synchronized修飾非靜態方法,實際上是對呼叫該方法的物件加鎖,俗稱 物件鎖 j a中每個物件都有乙個鎖,並且是唯一的。假設分配的乙個物件空間,裡面有多個方法,相當於空間裡面有多個小房間,如果我們把所有的小房間都加鎖,因為這個物件只有一把鑰匙,因...
原子性 synchronized 修飾的四種方式
原子性 synchronized 依賴jvm 1 修飾 塊 大括號括起來的 作用於 呼叫的物件 比如 public void test1 int j j,i 2 修飾方法 整個方法,作用於 呼叫的物件 比如 修飾乙個方法 public synchronized void test2 i 3 修飾靜態...