<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Loading

      【多線程】鎖的七大分類

      鎖的七大類

      在Java的多線程中,有很多種鎖,每種鎖可能同時占有多個標準,比如ReentranLock即可是中斷鎖,又可以是可重入鎖。

      那么根據分類標準,我們可以把這些鎖分為以下七大標準,分別是:

      • 偏向鎖/輕量級鎖/重量級鎖
      • 可重入鎖/非可重入鎖
      • 共享鎖/獨占鎖
      • 公平鎖/非公平鎖
      • 悲觀鎖/樂觀鎖
      • 自旋鎖/非自旋鎖
      • 可中斷鎖/不可中斷鎖

      偏向鎖/輕量級鎖/重量級鎖

      這三種鎖特指 synchronized 鎖的狀態,通過在對象頭種的mark word來表明鎖的狀態。

      偏向鎖

      在被synchronized修飾的情況下,當前正在執行synchronized的線程,有且只有一個線程來獲取synchronized的鎖,這個時候系統就會給他升級為偏向鎖,因為前來獲取鎖的線程并沒有其他現在來競爭獲取,所以系統只需要給他打一個標記,告訴它下一次的鎖直接給他,這樣就可以直接獲得鎖,并且開銷也是最小的。

      輕量級鎖

      滿足輕量級鎖的條件

      1. 被synchronized進行修飾的鎖
      2. 被多個線程交替執行的,不是同時執行,不存在實際的競爭
      3. 只有短時間的鎖競爭
        如果滿足上面三種情況,synchronized鎖的狀態就會從偏向鎖升級為輕量級鎖,線程會通過自旋的形式來獲取鎖,而不會陷入阻塞

      重量級鎖

      滿足重量級鎖的條件

      1. 被synchronized進行修飾的鎖
      2. 被多個線程交替執行的并且是同時執行
      3. 鎖的競爭時間較長
        重量級鎖是互斥鎖,他利用的是操作系統的同步機制來實現的,所以開銷會比偏量鎖和輕量鎖的開銷都大,當滿足上面的條件后,輕量級鎖就會升級為重量級鎖,重量級鎖就會讓其他申請卻拿不到鎖的線程進入到阻塞狀態。

      鎖升級路線

      image.png
      結合上面的描述,我們其實可以發現得到對于synchronized鎖的升級路線,并且性能也是由著鎖升級的推進,性能的開銷也會變的越來越大。

      可重入鎖/非可重入鎖

      可重入鎖:一個線程內可以同時獲取一把鎖多次
      比如在線程A中有一把B鎖,如果A在獲取到B鎖的情況下,再次去獲取B鎖,如果可以獲取到B鎖,那么他就是一把可重入鎖。
      例子:ReentrantLock

      不可重入鎖:一個線程內只能同時擁有一把鎖一次
      比如在線程A中有一把B鎖,如果A線程在獲取到B鎖的情況下,想再次去獲取到B鎖卻失敗了,需要釋放到之前的B鎖,然后再去獲取B鎖,那么這樣就是一個不可重入鎖。

      共享鎖/獨占鎖

      共享鎖:可以同時被多個線程獲取到鎖,例如我們常見的讀操作,它并不影響數據,所以可以被允許將鎖給多個線程同時訪問。
      獨占鎖:有且只能被一個鎖獨占訪問,這種就常用到我們的寫操作上,由于需要保證數據的一致性和原子性。就需要在數據的寫操作上只能允許一個線程來訪問使用。

      公平鎖/非公平鎖

      公平鎖:遵循先來先得的規則,如果線程在搶不到鎖的情況下,會進入到排序的狀態中,最先排隊靠前的鎖就會最顯輪到獲取鎖。
      非公平鎖:在公平鎖的規則基礎上,會在一定的情況下導致鎖插隊。

      自旋鎖/非自旋鎖

      自旋鎖的理念就是在線程拿不到鎖的時候,它并不會進入到阻塞狀態或者釋放掉CPU的資源,它是直接去循環的去訪問鎖的狀態,不斷的去嘗試獲取鎖,這個循環的過程也被叫做自旋。
      非自旋鎖就跟自旋鎖相反,他沒獲取到鎖他就不會再去嘗試獲取,但是他會直接去排隊或者陷入阻塞狀態中。

      可中斷鎖/不可中斷鎖

      顧名思義,可中斷鎖就是在獲取到鎖后可以中斷他的任務然后去做其他的任務,最典型的就是使用ReentrantLock,它就是一種典型的可中斷鎖,例如使用lockInterruptibly方法再獲取鎖的過程中,突然不想獲取了,那么也可以在中斷之后去做其他的事情,不需要一直傻等到獲取鎖才離開

      不可中斷鎖就沒有那么靈活,典型的就是synchronized,一旦申請了鎖,那么就沒有回頭路了,只能等到拿到鎖以后才能進行其他的邏輯處理。

      posted @ 2022-01-29 15:22  鄧小白  閱讀(1295)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产成人精品三级麻豆| 亚洲一区二区三区小蜜桃| 国产一区二区三区导航| 欧洲成人在线观看| 精品av综合导航| 国产精品日本一区二区不卡视频| 精品人妻一区二区| 中文字幕精品亚洲无线码二区| 高级艳妇交换俱乐部小说| 国产高清在线精品一本大道| 国产精品福利自产拍在线观看| 国产午夜亚洲精品国产成人| 国产在线精品成人一区二区| 人妻在线中文字幕| 国产精品麻豆成人av网| 久久99国内精品自在现线| 中文人妻熟妇乱又伦精品| 一区二区三区四区五区自拍| 四虎精品视频永久免费| 国产超碰无码最新上传| 久久zyz资源站无码中文动漫| av色国产色拍| 久久香蕉国产线看观看猫咪av| 日本精品不卡一二三区| 成人小说亚洲一区二区三区| 99精品国产中文字幕| 少妇人妻偷人精品免费| a级亚洲片精品久久久久久久| 一日本道伊人久久综合影| 亚洲色大成网站WWW尤物| 强行交换配乱婬bd| 深夜av在线免费观看| 五十路久久精品中文字幕| 色噜噜一区二区三区| 国产一区二区日韩在线| 久久99久久99精品免视看国产成人| 2020中文字字幕在线不卡| 在线观看特色大片免费视频| 欧美又黄又大又爽a片三年片| 中文字幕人妻av12| 蜜桃AV抽搐高潮一区二区|