亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java高并發之魂:synchronized深度解析

難度入門
時長 2小時50分
學習人數
綜合評分9.53
114人評價 查看評價
9.7 內容實用
9.3 簡潔易懂
9.6 邏輯清晰
  • http://img1.sycdn.imooc.com//62666d1f000149ca13180664.jpg

    1.效率問題 2.看業務,優先考慮synchronized(簡單) 3.主要判斷被鎖的對象

    查看全部
    0 采集 收起 來源:常見面試問題

    2022-04-25

  • http://img1.sycdn.imooc.com//6266696d00010bfd13170688.jpg

    直到等于0時,那個鎖才算是徹底釋放了

    查看全部
    0 采集 收起 來源:可重入原理

    2022-04-25

  • http://img1.sycdn.imooc.com//6266689f0001580c13310689.jpg

    Synchronized編譯后,會生成monitorenter-加鎖,monitorexit釋放鎖

    查看全部
    0 采集 收起 來源:看monitor指令

    2022-04-25

  • https://img1.sycdn.imooc.com//626664e100014ccb10140468.jpg

    https://img1.sycdn.imooc.com//626664ef00013f7808900458.jpg

    答案:1.先后 2.同時 3.先后 4.同時 5.先后 6.同時 7.會

    查看全部
  • 本課程的知識點回顧

    查看全部
    0 采集 收起 來源:課程的總結_

    2022-02-20

  • 1、讀寫鎖:讀的時候可以多線程執行

    2、將synchronized替換為lock

    查看全部
    0 采集 收起 來源:思考題

    2022-02-20

  • synchronized的缺陷:效率低、不夠靈活、不知道是否成功獲取了鎖

    查看全部
    0 采集 收起 來源:Synchronized缺陷

    2022-02-20

  • 第一次進入函數前拿到鎖1,遞歸進入函數時,synchronized的可重入性,決定了鎖1依舊可以進入

    查看全部
  • 4、同步方法會有鎖,只有一個線程進入,但是非同步方法隨意進入,所以會出現并發情況

    5、由于兩個同步方法拿到的是同一個鎖instance,所以要按照順序執行

    6、靜態方法拿到的是類鎖xxx.Class,非靜態方法拿到的是對象鎖instance,所以會出現并發的情況

    7、一定是先拋出異常,再釋放鎖

    查看全部
  • 1、兩個thread,一個instance==按照順序執行,加鎖成功

    2、兩個thread,兩個instance==各自持有鎖,并發執行

    3、兩個thread,一個synchronized修飾的靜態方法==此時是一個類鎖,即一把鎖,按照順序執行

    查看全部
  • 對象鎖(方發鎖、同步代碼塊鎖)、類鎖(靜態方法鎖、指定鎖為Class對象)

    查看全部
  • synchronized的作用:

    能夠保證在“同一時刻”最多只有一個線程執行該段代碼,達到保證并發安全的效果

    查看全部
  • synchronized的兩個用法

    61ff2bb20001d5f207200404.jpg
    查看全部
  • Synchronized的作用:

    官方:同步方法支持一種簡單的策略來防止線程干擾和內存一致性錯誤:如果一個對象對多個線程可見,則對該對象變量的所有讀取或寫入都是通過同步方法完成的。


    一句話說出作用:能夠保證在同一時刻最多只有一個線程執行該段代碼,以達到保證并發安全的效果。


    Synchronized的兩個用法:

    • 對象鎖:

      包括方法鎖(默認鎖對象為this當前實例對象)和同步代碼塊鎖(自己指定鎖對象)

    • 類鎖:

      指synchronized修飾靜態的方法或指定鎖為Class對象


    性質

    • 可重入

      • 什么是可重入:指的是同一線程的外層函數獲得鎖之后,內層函數可以直接再次獲取該鎖

      • 好處:避免死鎖、提升封裝性

    • 不可中斷

      • 一旦這個鎖已經被別人獲得了,如果我還想獲得,我只能選擇等待或者阻塞,直到別的線程釋放這個鎖。如果別人永遠不釋放鎖,那么我只能永遠地等下去。


    原理

    • 加鎖和釋放鎖地原理:

      • 獲取和釋放鎖地時機:進入和推出同步代碼塊(包括拋出異常)

      • 通過monitorenter和monitorexit指令

    • 可重入原理:加鎖次數計數器

      • JVM會記錄被加鎖的次數

    • 保證可見性地原理:內存模型

      • synchronized可以保證可見性


    Synchronized缺陷

    • 效率低:鎖的釋放情況少、視圖獲得鎖時不能設定超時、不能中斷一個正在試圖獲得鎖的線程

    • 不夠靈活(讀寫鎖更靈活):加鎖和釋放的時機單一,每個鎖僅有單一的條件(某個對象),可能是不夠的

    • 無法知道是否成功獲取到鎖


    常見面試問題

    • 使用注意點:鎖的范圍不宜過大、避免鎖的嵌套

    • 如何選擇Lock和synchronized關鍵字?

      • synchronized能滿足需求優先使用synchronized

      • lock更靈活,但是容易編寫代碼出錯

    • 多線程訪問同步方法的各種具體情況

      確定鎖對象


    思考題

    • Synchronized使得同時只有一個線程可以執行,性能較差,有什么辦法可以提升性能?

      如果是讀多寫少的情況下,可以使用讀寫鎖代替

    • 我想更靈活地控制鎖地獲取和釋放(現在釋放鎖的時機都被規定死了),怎么辦?、

      可以考慮使用Lock

    ?? ?

    總結:

    一句話介紹Synchronized:

    JVM會自動通過使用monitor來加鎖和解鎖,保證了同時只有一個線程可以執行指定代碼,從而保證了線程安全,同時具有可重入和不可中斷的性質。

    查看全部
    3 采集 收起 來源:課程的總結_

    2022-01-06

  • 重點看是否需要釋放鎖后再次獲取

    查看全部

舉報

0/150
提交
取消
課程須知
1、基本的Java語法知識。 2、最基本的線程知識,比如在Java中如何創建線程。
老師告訴你能學到什么?
1、完全學會高并發中synchronized這個最靈魂級解決方案以及一線互聯網資深工程師的開發、調試經驗,提高填‘坑’能力。 2、synchronized底層原理源碼深度解析、適用場景、使用和調試。 3、高并發面試中synchronized的高頻經典考察點,讓你在面試中和面試官聊到停不下來。

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!