亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java線程活鎖的實現與死鎖等的區(qū)別

 更新時間:2024年04月01日 11:45:25   作者:小張frog  
活鎖是一種遞歸情況,其中兩個或更多線程將繼續(xù)重復特定的代碼邏輯,本文主要介紹了Java線程活鎖的實現與死鎖等的區(qū)別,具有一定的參考價值,感興趣的可以了解一下

1、什么是活鎖

活鎖是指,線程沒有發(fā)生阻塞,但依然執(zhí)行不下去的情況。

2、活鎖的例子

如果兩個線程互相改變對方的結束條件,就可能導致雙方誰也無法結束。

比如這個程序:

public class TestLiveLock {
    static volatile int count = 10;
    static final Object lock = new Object();
    public static void main(String[] args) {
        new Thread(() -> {
            // 期望減到 0 退出循環(huán)
            while (count > 0) {
                sleep(0.2);
                count--;
                log.debug("count: {}", count);
            }
        }, "t1").start();
        
        new Thread(() -> {
            // 期望超過 20 退出循環(huán)
            while (count < 20) {
                sleep(0.2);
                count++;
                log.debug("count: {}", count);
            }
        }, "t2").start();
    }
}

相當于一個抽水一個注水,水池永遠不會空或者滿

用生活舉例看Java多線程活躍性問題【死鎖、饑餓、活鎖】

死鎖:吃飯問題,5個人每人只有一雙筷子,只有讓另外一個人分享他自己的筷子給自己,自己才能吃到飯。若存在這樣的情況,若每個人都不把自己的筷子借給別人用餐,每個人都抓著自己手中的筷子不放,那么每個人都吃不上飯餓死了。也就是說A線程擁有B線程所需的資源,B線程也有A線程所需資源,但兩者都不把資源分享出來,最后需求達不到,最后餓死。

饑餓問題:學校飯?zhí)门抨牬蝻垼行┤藷o秩序插隊,那么插隊的人擁有了更高的優(yōu)先級,更可能打到飯吃,也可能他買上了飯也不離開,導致后面的人無法打飯。最后那些守規(guī)矩的人(優(yōu)先級很低的人),就被餓死了。

引起饑餓問題的一些因素:

  • 高優(yōu)先級吞噬所有低優(yōu)先級的CPU時間片
  • 線程被永久堵塞在一個等待進入同步塊的狀態(tài)
  • 等待的線程永遠不被喚醒來

如果盡量避免饑餓問題:

設置合理的優(yōu)先級,使用鎖來代替synchronized

活鎖:到達終點有兩條路(記作1號路和2號路),有一對冤家A和B兩人同時走了1號路,在途中相遇,他們倆看見了對方,于是都轉身離開,A走了2號路,B也走了2號路,在行走的過程中,兩人又再見碰面,于是又轉身離開。后來A、B兩人又同時走了1號路又再次碰面,就這樣反反復復...這就是活鎖問題

到此這篇關于Java線程活鎖的實現與死鎖等的區(qū)別的文章就介紹到這了,更多相關Java線程活鎖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java自加和自減運算過程

    java自加和自減運算過程

    這篇文章主要介紹了java自加和自減運算過程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • 淺談Java解釋器模式

    淺談Java解釋器模式

    這篇文章主要介紹了Java基于解釋器模式實現定義一種簡單的語言功能,簡單描述了解釋器模式的概念、功能及Java使用解釋器模式定義一種簡單語言的相關實現與使用技巧,需要的朋友可以參考下
    2021-10-10
  • 導入項目出現Java多個工程相互引用異常A cycle was detected in the build path of project的解決辦法

    導入項目出現Java多個工程相互引用異常A cycle was detected in the build path o

    今天小編就為大家分享一篇關于導入項目出現Java多個工程相互引用異常A cycle was detected in the build path of project的解決辦法,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java中JUC包(java.util.concurrent)下的常用子類

    Java中JUC包(java.util.concurrent)下的常用子類

    相信大家已經對并發(fā)機制中出現的很多的常見知識點進行了總結,下面這篇文章主要給大家介紹了關于Java中JUC包(java.util.concurrent)下的常用子類的相關資料,文中通過圖文以及示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • Java 實現對稱加密算法

    Java 實現對稱加密算法

    這篇文章主要介紹了Java 實現對稱加密算法的相關資料,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-11-11
  • spring boot 加載web容器tomcat流程源碼分析

    spring boot 加載web容器tomcat流程源碼分析

    本文章主要描述spring boot加載web容器 tomcat的部分,為了避免文章知識點過于分散,其他相關的如bean的加載,tomcat內部流程等不做深入討論,具體內容詳情跟隨小編一起看看吧
    2021-06-06
  • Spring Boot+Nginx實現大文件下載功能

    Spring Boot+Nginx實現大文件下載功能

    相信很多小伙伴,在日常開放中都會遇到大文件下載的情況,大文件下載方式也有很多,比如非常流行的分片下載、斷點下載;當然也可以結合Nginx來實現大文件下載,在中小項目非常適合使用,這篇文章主要介紹了Spring Boot結合Nginx實現大文件下載,需要的朋友可以參考下
    2024-05-05
  • java8的stream如何取max

    java8的stream如何取max

    這篇文章主要介紹了java8的stream如何取max問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java實現簡單登錄界面的實戰(zhàn)過程

    java實現簡單登錄界面的實戰(zhàn)過程

    學習JAVA的過程當中,登陸界面是多數人第一個實現的小程序,下面這篇文章主要給大家介紹了關于利用java實現簡單登錄界面的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • 使用MultipartFile實現文件上傳功能

    使用MultipartFile實現文件上傳功能

    這篇文章主要介紹了使用MultipartFile實現文件上傳功能,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評論