欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java線程活鎖的實(shí)現(xiàn)與死鎖等的區(qū)別

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

1、什么是活鎖

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

2、活鎖的例子

如果兩個(gè)線程互相改變對(duì)方的結(jié)束條件,就可能導(dǎo)致雙方誰(shuí)也無(wú)法結(jié)束。

比如這個(gè)程序:

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(() -> {
            // 期望超過(guò) 20 退出循環(huán)
            while (count < 20) {
                sleep(0.2);
                count++;
                log.debug("count: {}", count);
            }
        }, "t2").start();
    }
}

相當(dāng)于一個(gè)抽水一個(gè)注水,水池永遠(yuǎn)不會(huì)空或者滿

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

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

饑餓問(wèn)題:學(xué)校飯?zhí)门抨?duì)打飯,但有些人無(wú)秩序插隊(duì),那么插隊(duì)的人擁有了更高的優(yōu)先級(jí),更可能打到飯吃,也可能他買(mǎi)上了飯也不離開(kāi),導(dǎo)致后面的人無(wú)法打飯。最后那些守規(guī)矩的人(優(yōu)先級(jí)很低的人),就被餓死了。

引起饑餓問(wèn)題的一些因素:

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

如果盡量避免饑餓問(wèn)題:

設(shè)置合理的優(yōu)先級(jí),使用鎖來(lái)代替synchronized

活鎖:到達(dá)終點(diǎn)有兩條路(記作1號(hào)路和2號(hào)路),有一對(duì)冤家A和B兩人同時(shí)走了1號(hào)路,在途中相遇,他們倆看見(jiàn)了對(duì)方,于是都轉(zhuǎn)身離開(kāi),A走了2號(hào)路,B也走了2號(hào)路,在行走的過(guò)程中,兩人又再見(jiàn)碰面,于是又轉(zhuǎn)身離開(kāi)。后來(lái)A、B兩人又同時(shí)走了1號(hào)路又再次碰面,就這樣反反復(fù)復(fù)...這就是活鎖問(wèn)題

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

相關(guān)文章

  • java自加和自減運(yùn)算過(guò)程

    java自加和自減運(yùn)算過(guò)程

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

    淺談Java解釋器模式

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

    導(dǎo)入項(xiàng)目出現(xiàn)Java多個(gè)工程相互引用異常A cycle was detected in the build path o

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

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

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

    Java 實(shí)現(xiàn)對(duì)稱加密算法

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

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

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

    Spring Boot+Nginx實(shí)現(xiàn)大文件下載功能

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

    java8的stream如何取max

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

    java實(shí)現(xiàn)簡(jiǎn)單登錄界面的實(shí)戰(zhàn)過(guò)程

    學(xué)習(xí)JAVA的過(guò)程當(dāng)中,登陸界面是多數(shù)人第一個(gè)實(shí)現(xiàn)的小程序,下面這篇文章主要給大家介紹了關(guān)于利用java實(shí)現(xiàn)簡(jiǎn)單登錄界面的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 使用MultipartFile實(shí)現(xiàn)文件上傳功能

    使用MultipartFile實(shí)現(xiàn)文件上傳功能

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

最新評(píng)論