一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java中的關鍵字synchronized 詳解

Java中的關鍵字synchronized 詳解

2021-07-22 16:29陽光、大地和詩歌 Java教程

這篇文章主要介紹了Java中的關鍵字synchronized,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在并發編程中,synchronized關鍵字是常出現的角色。之前我們都稱呼synchronized關鍵字為重量鎖,但是在jdk1.6中對synchronized進行了優化,引入了偏向鎖、輕量鎖。本篇介紹synchronized關鍵字的使用方式,區別和偏向鎖、輕量鎖和重量鎖實現原理。

先看看synchronized關鍵字的4種用法。

1、修飾普通方法

?
1
2
3
private synchronized void synmethod(){
 
}

這種用法中,synchronized鎖的對象實例。

2、修飾靜態方法

?
1
2
3
private static synchronized void synmethod(){
  
 }

synchronized在這種情況下,鎖的是當前class類對象。

3、同步方法塊

?
1
2
3
4
5
6
7
8
9
10
private void synmethod1(){
  synchronized(this){
   
  }
 }
 private void synmethod2(){
  synchronized(threadtest.class){
   
  }
 }

synmethod1中鎖對象實例;synmethod2的是當前class類對象。

再介紹鎖原理

在介紹鎖原理之前,先認識一下java對象頭mark word,以32位為例。

 

鎖狀態

25 bit

4bit

1bit

2bit

 

23bit

2bit

是否偏向鎖

鎖標志位

輕量級鎖

指向棧中鎖記錄的指針

0

重量級鎖

指向互斥量(重量級鎖)的指針

10

gc標記

11

偏向鎖

線程id

epoch

對象分代年齡

1

01

無鎖

對象的hashcode

對象分代年齡

0

01

 

上面的表格中,描述的是對象在每個鎖狀態時,對象頭中所存儲的信息。

1、偏向鎖

實際環境中,線程在訪問同步塊時,如果沒有其他線程對鎖進行競爭,并且由同一個線程多次獲得鎖,也就是單線程運行同步代碼,在這種情況下,若是每次還阻塞線程,就代表白白浪費cpu性能。這種情況下,引入了偏向鎖概念。

Java中的關鍵字synchronized 詳解

  1. 訪問同步代碼塊
  2. 判斷對象頭mark word中存儲的線程id是否指向當前線程,如果是,則表明當前是鎖的重入,不需要再獲得鎖,直接執行同步代碼
  3. 如果不是,則嘗試使用cas算法將線程id更新至對象頭中。
  4. 成功,獲得鎖,執行同步代碼。更新失敗表明存在鎖競爭,等待全局安全點,暫停擁有偏向鎖的線程,根據對象頭的鎖標志位,選擇將偏向鎖升級為輕量鎖或者置為無鎖。

可以使用-xx:-userbiasedlocking=false來關閉jvm偏向鎖優化,默認直接進入輕量鎖。

2、輕量鎖

Java中的關鍵字synchronized 詳解

訪問同步代碼塊時,先在當前線程的線程棧中創建一個鎖記錄(lock record)區域。

把對象頭mark word拷貝到lock record中。

利用cas嘗試將對象頭mark word中的線程指針更新為指向當前線程的指針

更新成功,則獲得輕量鎖。

更新失敗,檢查mark word中的指針是否指向當前線程。

如果是,則說明是鎖的重入現象。執行同步代碼塊

如果不是,則說明此時存在競爭。需要把輕量鎖膨脹為重量鎖。

3、重量鎖

重量鎖是基于對象監視器(monitor)來實現的。

Java中的關鍵字synchronized 詳解

 線程在執行同步代碼時,需要調用一個monitor.enter指令。執行退出后,調用monitor.exit指令。這里看得出,監視器具有排它性,一個時間點只能有一個線程enter成功,其他線程只能阻塞在隊列中。所以這種重量鎖的操作成本很高。

以上所述是小編給大家介紹的java中的關鍵字synchronized詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://www.cnblogs.com/sunshine-ground-poems/p/10317381.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产福利一区二区在线精品 | 久久受www免费人成_看片中文 | 亚洲 另类 欧美 变态屎尿 | 国产大片51精品免费观看 | 黑帮少爷爱上我第8集最新 荷兰精品女人性hd 和日本免费不卡在线v | 三上悠亚国产精品一区 | 国产在线视频一区二区三区 | 窝窝午夜精品一区二区 | 亚洲AV精品无码喷水直播间 | 日韩精品特黄毛片免费看 | 初尝黑人巨大h文 | 国产精品露脸国语对白手机视频 | 狠狠干2016| 青青草成人在线观看 | gogort99人体专业网站 | 天天狠天天透 | 情乱奶水欲| coolgay男男gayxxx chinese壮直男gay老年人 chinese野外gay军人 | 午夜精品久久久久久久99蜜桃i | 国产成人精品实拍在线 | 小草视频免费观看在线 | 日本高清在线播放一区二区三区 | 放荡的女老板bd中文字幕 | 99资源站| 无限观看社区在线视频 | 亚洲AV精品无码喷水直播间 | 欧美精品一区二区三区久久 | 精品国产国偷自产在线观看 | 公妇仑乱在线观看 | 日本b站一卡二不卡三卡四卡 | 朝鲜女人free性hu | 九九精品久久 | 久久99国产综合精品AV蜜桃 | 国产精品人人视频 | 欧美在线视频7777kkkk | 国产二区视频 | 窝窝午夜理伦影院 | 奇米影视4444 | 福利视频免费 | 潘金莲西门庆一级淫片aaaaaa | 成人在线日韩 |