Synchronized的前因後果

2021-10-08 01:34:18 字數 2057 閱讀 3677

當多個執行緒要對同乙個目標進行修改的時候,為了保證資料的一致性,有序性,所以進行加鎖。

通過對乙個物件進行加鎖,只有乙個執行緒拿到這個物件,才能執行一段**。

但是不保證有序性

synchronized關鍵字實際修飾的是乙個object 類,類似於synchronized(object o), 如果直接修飾synchronized 方法,則等同於

鎖的是該類的this物件。

答案是可以,非同步方法沒有任何鎖,當然這段**可以被多個執行緒隨時訪問。

package juc.sync;

//同步方法和不同步的方法可否一起呼叫

public class t3 catch (interruptedexception e)

system.out.println(thread.currentthread().getname() + "synchronized");

} public void m2() catch (interruptedexception e)

system.out.println(thread.currentthread().getname() + "not synchronized");

} public static void main(string args) ).start();

new thread(t::m1,"t1").start();

// new thread(()-> ).start();

new thread(t::m2,"t2").start();}}

可重入的意思是乙個同步方法是否可以呼叫另乙個同步方法?可以,因為第乙個方法拿的是乙個物件鎖,到第二方法的時候發現它也是同一把鎖的話,是允許呼叫第二個方法的**塊的。

package juc.sync;

public class t4 catch (interruptedexception e)

m2();

system.out.println(thread.currentthread().getname() + "呼叫完m2");

}synchronized void m2() catch (interruptedexception e)

system.out.println(thread.currentthread().getname() + "m2 end");

}public static void main(string args)

}

hotspot的實現,是鎖的物件上面有乙個64位的markword,64位中的2位用來判斷物件是否被鎖。

jdk早期都是重量級,就是直接對os去申請這個鎖,效率非常低。

現在採取了鎖公升級的方法。

比如我們sync(object o)

o上有乙個markword

鎖公升級的過程

1)最開始object o的時候是無鎖態。

2)然後有執行緒a要進去,就在這個鎖(門)上打上乙個標記a,偏向鎖,告訴這樣下次執行緒a再進來的時候看到標記a,就可以直接進去了。也就是在markword上記錄這個執行緒id

3) 如果這個時候執行緒b再來,就要和執行緒a競爭鎖(門),這個通過cas的過程來競爭,就是讀門上的標籤,如果為空,就去把執行緒b的位址寫到門上,但寫的過程發現標籤變了,就自旋等待。

4)如果自旋的執行緒超過一定數量,就會觸發鎖公升級到重量級/系統鎖,就全部進入鎖的佇列中,不再自旋等待了。

自旋鎖是消耗cpu, 而系統鎖會引起阻塞。

執行緒的執行時間短且執行緒少可以用自旋鎖,否則用重量級鎖

cas並不是通過加os鎖,

為了解決syncronize的效能問題,使用cas來解決,不需要加同步鎖

先是判斷當前讀出來的value值與expected進行比較,如果相當則更新為新值v, 如果不相等,就要重新讀取value值,一直等到相等的時候,更新為新值v。所以這個執行緒會一直自旋在那裡等待著兩值相等。

夜想 來到煙大的前因

這是前天晚上大半夜的睡不著,然後就在床上輾轉反側,突然就想到了現在的專業,我為什麼就選擇了這樣乙個完全被人認為不適合女生的專業呢?有時候和朋友聊天談到現在的學習,我便會自嘲的說 我們這是什麼破專業啊!我真的受不了了!其實靜下心來想想,並不是這樣吧。出成績 記憶還是特別深刻,當我點開高中同學發到班級群...

JVM類載入前因後果

類載入的入口是?或者說從那個類開始載入?類被載入後,是載入到了 載入完成的標記是什麼?什麼時候類才能被正式引用到?為什麼要採用分層載入的機制?自定義載入器中怎樣在載入的時候引用到更高階別類載入器已載入的類?那麼此文將從5個方面來說明類載入的前因後果,解開上述的疑問!why 為什麼要載入?類載入的目的...

又一今生惡報之前因

今年5月初有一夢,好似是在過去生往世中,記得夢中 我回到某處,當時我有一女友,或有可能是妻子之類,她的具體身份不甚明朗。竟然發現此女於我不忠,我甚為惱怒。情境轉換,來到了一艘帶棚的木船上。我拿著一把刀,似剛追到船上。那個女子坐在船倉最頭排,夢中印象最清楚的是女子腿上穿著長筒 她的身後坐著十幾個男人,...