亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

深入分析JAVA Synchronized關鍵字

瀏覽:77日期:2022-08-30 17:02:41

并發一致性的概念?

是利用鎖的機制來實現同步的,鎖機制有如下兩種特性:

互斥性:即在同一時間只允許一個線程持有某個對象鎖,通過這種特性來實現多線程中的協調機制,這樣在同一時間只有一個線程對需同步的代碼塊(復合操作)進行訪問。互斥性我們也往往稱為操作的原子性。

可見性:必須確保在鎖被釋放之前,對共享變量所做的修改,對于隨后獲得該鎖的另一個線程是可見的(即在獲得鎖時應獲得最新共享變量的值),否則另一個線程可能是在本地緩存的某個副本上繼續操作從而引起不一致。

Synchronized的用法?

1.同步方法

同步非靜態方法

/** * Synchronized關鍵字的用法 * @author Administrator * */public class SynchronizeDemo01 { /** * 修飾非靜態方法 * @Description: TODO * @returnType: void */ public synchronized void accessResources1(){ try { TimeUnit.SECONDS.sleep(2); System.out.println(Thread.currentThread().getName()+' is running!'); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { //非靜態方法的測試 SynchronizeDemo01 demo01 = new SynchronizeDemo01(); for (int i = 0; i < 5; i++) { new Thread(demo01::accessResources1).start(); } }}

同步靜態方法

/** * Synchronized關鍵字的用法 * @author Administrator * */public class SynchronizeDemo01 { /** * 修飾靜態方法 * @Description: TODO * @returnType: void */ public synchronized static void accessResources0(){ try { TimeUnit.SECONDS.sleep(2); System.out.println(Thread.currentThread().getName()+' is running!'); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { //靜態方法的測試 for(int i=0;i<5;i++){ new Thread(SynchronizeDemo01::accessResources0).start(); } }}

2.同步代碼塊

代碼塊對象,獲取對象鎖,在 Java 中,每個對象都會有一個 monitor 對象,這個對象其實就是 Java 對象的鎖,通常會被稱為“內置鎖”或“對象鎖”。類的對象可以有多個,所以每個對象有其獨立的對象鎖,互不干擾。

/** * Synchronized關鍵字的用法 * @author Administrator * */public class SynchronizeDemo01 { /** * synchronized代碼塊(對象),this指的是當前對象 * @Description: TODO * @returnType: void */ public void accessResources2(){ synchronized(this){ try {TimeUnit.SECONDS.sleep(2);System.out.println(Thread.currentThread().getName()+' is running!'); } catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace(); } } } public static void main(String[] args) { //非靜態方法的測試 SynchronizeDemo01 demo01 = new SynchronizeDemo01(); for (int i = 0; i < 5; i++) { new Thread(demo01::accessResources2).start(); } }}

代碼塊 (類.class),獲取類鎖,在 Java 中,針對每個類也有一個鎖,可以稱為“類鎖”,類鎖實際上是通過對象鎖實現的,即類的 Class 對象鎖。每個類只有一個 Class 對象,所以每個類只有一個類鎖。

/** * Synchronized關鍵字的用法 * @author Administrator * */public class SynchronizeDemo01 { /** * synchronized代碼塊(類.class) * @Description: TODO * @returnType: void */ public void accessResources3(){ synchronized(SynchronizeDemo01.class){ //有Class對象的所有的對象都共同使用這一個鎖 try {TimeUnit.SECONDS.sleep(2);System.out.println(Thread.currentThread().getName()+' is running!'); } catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace(); } } } public static void main(String[] args) { //非靜態方法的測試 SynchronizeDemo01 demo01 = new SynchronizeDemo01(); for (int i = 0; i < 5; i++) { new Thread(demo01::accessResources3).start(); } }}

Java對象的monitor對象的作用?

1.當某一線程想要占有這個對象的時候,首先判斷monitor 的計數器是不是0,如果是0表示還沒有線程占有,這個時候線程可以占有這個對象,并且對這個對象的monitor+1;如果不為0,表示這個線程已經被其他線程占有,那么這個線程需要等待。當線程釋放占有權的時候,monitor-1。

2. 同一線程可以對同一對象進行多次加鎖,+1,+1,重入性

Synchronized代碼塊的加鎖機制?

1.對代碼塊的加鎖,通過反編譯文件,發現在Monitorenter和Monitorexit中間是加鎖的部分

深入分析JAVA Synchronized關鍵字

2.對方法的加鎖,通過反編譯文件,發現標有ACC_SYNCHRONIZED標識的為加鎖方法

深入分析JAVA Synchronized關鍵字

Java虛擬機中幾種鎖的對比?

深入分析JAVA Synchronized關鍵字

無狀態鎖:沒有加鎖

偏向鎖:在對象第一次被某一線程占有的時候,會將“是否偏向鎖”字段置為1,“鎖標志位”記為01,寫入線程號,當其他的線 程訪問的時候,就會發生 競爭,如果競爭失敗則升級為輕量級鎖。偏向鎖更加偏向第一次訪問的線程獲取鎖成功。

  輕量級鎖:線程有交替適用,互斥性不是很強,當偏向鎖通過CAS算法獲取鎖失敗,把鎖標志位置為00。

重量級鎖:強互斥,鎖標志位為10,等待時間長

以上就是深入分析JAVA Synchronized關鍵字的詳細內容,更多關于JAVA Synchronized關鍵字的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 欧美成人亚洲高清在线观看 | 麻豆短视频在线观看 | 深夜在线看片 | 国产精品亚洲一区二区在线观看 | 亚洲国产系列一区二区三区 | 国产资源在线视频 | 国产成人精品综合网站 | 日韩第1页 | 日韩第九页 | 亚洲综合精品香蕉久久网 | 亚洲一级毛片在线观 | 国产精品大全国产精品 | 国产免费a | 麻豆传媒视频网站 | 久久国产自偷自偷免 | 国产91po在线观看免费观看 | 久久精品中文字幕一区 | 国产成人高清在线 | 国产呦系列 欧美呦 日韩呦 | 欧美日韩在线成人 | 亚洲自拍色 | 美女免费精品高清毛片在线视 | 97日韩| 欧美三级不卡在线观线看高清 | 久久亚洲国产成人影院 | 打床炮视频在线观看免费 | 黄色片免费在线播放 | 日韩视频高清 | 黄色的视频免费看 | 97色涩| 91大神大战丝袜美女在线观看 | 日本一级www | 亚洲不卡在线观看 | 特黄特黄黄色大片 | 一区二区成人国产精品 | 久久草在线免费 | japenese色系tube日本护士 | 日本高清视频一区二区 | 久久怡红院亚欧成人影院 | 免费看a级毛片 | 一级片黑人 |