色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

synchronized知識合集1

jf_78858299 ? 來源:JAVA旭陽 ? 作者:JAVA旭陽 ? 2023-05-11 11:07 ? 次閱讀
  • 線程安全
  • 什么是synchronized關鍵字?
  • synchronized實現方式
    • 1.修飾實例方法
    • 2.修飾靜態方法
    • 3.修飾代碼塊
  • synchronized關鍵字底層原理
    • synchronized修飾實例方法
    • monitor鎖是什么?
    • Java對象內存布局
    • synchronized修飾代碼塊
  • 鎖優化
    • 自旋鎖
    • 鎖粗化
    • 鎖消除
    • 鎖膨脹
  • synchronized關鍵字實現單例模式
  • synchronized 和 volatile 的區別?
  • 尾語
  • 參考資料

圖片

前言

今天我們來聊聊synchronized關鍵字,其可以同時保證三者,實現線程安全。

線程安全

在介紹synchronized關鍵字之前,我們得強調一下什么是線程安全,所謂線程安全:

當多個線程同時訪問一個對象時, 如果不用考慮這些線程在運行時環境下的調度和交替執行, 也不需要進行額外的同步, 或者在調用方進行任何其他的協調操作, 調用這個對象的行為都可以獲得正確的結果, 那就稱這個對象是線程安全的

什么是synchronized關鍵字?

在 Java 早期版本中,synchronized 屬于 重量級鎖 ,效率低下;不過在 Java 6 之后,Java 官方對從 JVM 層面對 synchronized 較大優化,所以現在的 synchronized 鎖效率也優化得非常不錯。目前不論是各種開源框架還是 JDK 源碼都大量使用了 synchronized 關鍵字

synchronized實現方式

synchronized的使用其實比較簡單,可以用它來修飾實例方法和靜態方法,也可以用來修飾代碼塊。我們需要注意的是synchronized是一個對象鎖,也就是它鎖的是一個對象。我們無論使用哪一種方法,synchronized都需要有一個鎖對象

  1. 修飾實例方法
  2. 修飾靜態方法
  3. 修飾代碼塊

1.修飾實例方法

synchronized修飾實例方法, 在方法上加上synchronized關鍵字即可。

public class SynchronizedTest1 {
    public synchronized void test() {
        System.out.println("synchronized 修飾 方法");
    }
}

此時,synchronized加鎖的對象就是這個方法所在實例的本身,作用于當前實例加鎖,進入同步代碼前要獲得 當前實例的鎖

補充一個常見的面試題:構造方法可以用synchronized關鍵字修飾嗎?

不能,也不需要,因為構造方法本身就是線程安全的

2.修飾靜態方法

synchronized修飾靜態方法的使用與實例方法并無差別,在靜態方法上加上synchronized關鍵字即可

public static synchronized void test(){
       i++;
}

由于靜態方法不屬于任何一個實例對象,歸整個類所有,不依賴于類的特定實例,被類的所有實例共享。給靜態方法加synchronized鎖,會作用于類的所有對象實例 ,進入同步代碼前要獲得 當前靜態方法所在類的Class對象的鎖

有一點我們需要知道:如果一個線程 A 調用一個實例對象的非靜態 synchronized 方法,而線程 B 需要調用這個實例對象所屬類的靜態 synchronized 方法,是允許的,不會發生互斥現象, 因為訪問靜態 synchronized 方法占用的鎖是當前類的鎖,而訪問非靜態 synchronized 方法占用的鎖是當前實例對象鎖

3.修飾代碼塊

synchronized修飾代碼塊需要傳入一個對象。

public class SynchronizedTest2 {
    public void test() {
        synchronized (this) {
            System.out.println("synchronized 修飾 代碼塊");
        }
    }
}

此時synchronized加鎖對象即為傳入的這個對象實例,指定加鎖對象,進入同步代碼庫前要獲得給定對象的鎖 需要注意的是這里的**this **:

  1. synchronized(object) ,表示進入同步代碼庫前要獲得 給定對象的鎖
  2. synchronized(類.class) ,表示進入同步代碼前要獲得 給定 Class 的鎖
  3. 最好不要使用 synchronized(String a) ,因為在 JVM 中,字符串常量池具有緩存功能, 如果我們多次加鎖,會加鎖在同一個對象上
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2966

    瀏覽量

    104704
  • 代碼
    +關注

    關注

    30

    文章

    4780

    瀏覽量

    68530
  • 線程安全
    +關注

    關注

    0

    文章

    13

    瀏覽量

    2458
收藏 人收藏

    評論

    相關推薦

    關于labview的論文合集1

    關于labview的論文合集1
    發表于 09-23 13:45

    求解有沒有類似于電子發燒友這樣的分版塊的知識合集

    求解有沒有類似于電子發燒友這樣的分版塊的知識合集
    發表于 09-27 00:48

    有線通信的知識點大合集,絕對實用

    有線通信的知識點大合集,絕對實用
    發表于 01-17 08:24

    SPI協議的知識點大合集,絕對實用

    SPI協議的知識點大合集,絕對實用
    發表于 02-17 07:31

    stm32f103中的電路知識點大合集,錯過后悔

    stm32f103中的電路知識點大合集,錯過后悔
    發表于 02-21 06:49

    Synchronized multi-spark modul

    Synchronized multi-spark module (SMSM) for Electronic Ignition Devices (EID)
    發表于 12-29 09:09 ?840次閱讀
    <b class='flag-5'>Synchronized</b> multi-spark modul

    電工技術基礎知識教程合集免費下載

    本文檔的主要內容詳細介紹的是電工技術基礎知識教程合集免費下載包括了:常用低壓供配電系統 ,電工安全的基本知識 ,常用儀表與測量 。
    發表于 08-24 08:00 ?135次下載
    電工技術基礎<b class='flag-5'>知識</b>教程<b class='flag-5'>合集</b>免費下載

    Java并發編程中線程同步的常用手段synchronized用法

    變量的修改能夠及時可見,獲得鎖的線程操作完畢后會將所數據刷新到共享內存區[1] 有序性:不解決重排序,但保證有序性 synchronized用法有三個: 修飾實例方法 修飾靜態方法 修飾代碼塊 1. 修飾實例方法
    的頭像 發表于 04-04 11:30 ?1168次閱讀
    Java并發編程中線程同步的常用手段<b class='flag-5'>synchronized</b>用法

    電力基礎知識合集

    電力基礎知識合集
    發表于 03-14 16:35 ?0次下載

    詳細介紹synchronized和Object的關鍵方法和虛擬機實現原理

    編程過程中經常會遇到線程的同步問題,Java 中對同步問題的解決方案比較多(synchronized、JUC、原子操作、volatile、條件變量等),其中synchronized 最方便、簡單易用,也是java 編程中使用最多的臨界區保護方案。
    的頭像 發表于 03-13 10:06 ?1260次閱讀

    synchronized知識合集2

    * 線程安全 * 什么是synchronized關鍵字? * synchronized實現方式 * 1.修飾實例方法 * 2.修飾靜態方法 * 3.修飾代碼塊
    的頭像 發表于 05-11 11:08 ?399次閱讀

    synchronized的原理與四種用法介紹

    JDK提供的鎖分兩種,一種是JVM實現的synchronized,是java的關鍵字,因此在這個關鍵字作用對象的范圍內都是可以保證原子性的,主要是依賴特殊的CPU指令。另一種是JDK提供的代碼層面的鎖Lock。
    的頭像 發表于 06-09 16:13 ?1091次閱讀
    <b class='flag-5'>synchronized</b>的原理與四種用法介紹

    synchronized 的幾種錯誤用法

    synchronized 在我們平常工作中也是挺常用的, 對于擺脫多線程問題很有幫助。但是如果synchronized被錯誤使用時,可能會給我們帶來很多麻煩。 在本文中,我們將討論與同步相關的一些
    的頭像 發表于 10-09 10:25 ?680次閱讀

    synchronized的鎖膨脹

    synchronized void sync1 ( ) { } // 鎖的是SynchronizedTest.class對象 public static void sync2 ( ) { synchronized
    的頭像 發表于 10-10 16:58 ?472次閱讀
    <b class='flag-5'>synchronized</b>的鎖膨脹

    C語言編程必備知識合集

    電子發燒友網站提供《C語言編程必備知識合集.zip》資料免費下載
    發表于 11-21 09:34 ?0次下載
    C語言編程必備<b class='flag-5'>知識</b><b class='flag-5'>合集</b>
    主站蜘蛛池模板: 美国VICTORY DAY在线| 久久www免费人成_看片高清| 国产美女又黄又爽又色视频网站| 国产精品无码中文在线AV| 国产人妻人伦精品59HHH| 红尘影院在线观看| 老司机深夜福利ae 入口网站| 美女图片131亚洲午夜| 日本zljzljzlj精品| 国产偷窥盗摄一区二区| 国内精品伊人久久久久| 久久精品久精品99热| 女教师二十三歳| 双性大乳浪受噗呲噗呲h总| 亚洲精品视频在线免费| 最近免费中文字幕MV免费高清| a一级一片免费观看视频| 高h乱np甄宓| 久久久久久久久久毛片精品美女| 欧美AAAAAA级午夜福利视频| 推倒美女总裁啪啪| 又黄又肉到湿的爽文| 啊…嗯啊好深男男高h文| 国产小视频免费看| 美国VICTORY DAY在线| 天天靠天天擦天天摸| 中文字幕人成人乱码亚洲影视| 背着老婆爆操性感小姨子| 国内自拍 在线 亚洲 欧美| 美女18黄| 亚洲 成人网| 99久久久久亚洲AV无码| 国产午夜精品不卡视频| 美女快播第一网| 小莹的性荡生活45章| 87影院午夜福利| 国产欧美一区二区三区久久| 免费A级毛片无码鲁大师| 性高跟鞋xxxxhd| AV72啪啪网站| 黄得让人湿的片段|