最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中ReentrantLock實現(xiàn)公平鎖和非公平鎖

 更新時間:2025年12月04日 08:26:29   作者:阿黃學技術(shù)  
在Java里,公平鎖和非公平鎖是多線程編程中用于同步的兩種鎖機制,它們的主要差異在于獲取鎖的順序規(guī)則,下面就來詳細的介紹一下,感興趣的可以了解一下

在 Java 里,公平鎖和非公平鎖是多線程編程中用于同步的兩種鎖機制,它們的主要差異在于獲取鎖的順序規(guī)則。下面是對二者的詳細介紹:

公平鎖

公平鎖遵循 “先來先服務(wù)” 原則,也就是線程獲取鎖的順序和請求鎖的順序一致。先請求鎖的線程會優(yōu)先獲得鎖,這樣可以保證每個線程都有公平的機會獲取鎖,避免某個線程長時間等待。

不過,公平鎖在實現(xiàn)公平性時會增加額外的開銷,因為需要維護一個有序的等待隊列。當一個線程釋放鎖后,會從隊列頭部選取下一個線程來獲取鎖。

非公平鎖

非公平鎖不保證線程獲取鎖的順序和請求鎖的順序一致。當鎖被釋放時,任何等待的線程都有機會獲取鎖,而不考慮其請求的先后順序。

非公平鎖可能會讓某些線程先于等待時間長的線程獲取鎖,從而產(chǎn)生 “饑餓” 現(xiàn)象,即部分線程長時間得不到鎖。但非公平鎖的性能通常比公平鎖要好,因為它減少了線程上下文切換和等待隊列管理的開銷。

實現(xiàn)公平鎖和非公平鎖

在創(chuàng)建ReentrantLock時可以指定true或者false在指定公平或者非公平鎖(ReentrantLock和Synchronized關(guān)鍵字默認是非公平鎖),像下面這樣

// 創(chuàng)建公平鎖
Lock fairLock = new ReentrantLock(true);
// 創(chuàng)建非公平鎖
Lock unfairLock = new ReentrantLock(false);

如下是測試ReentrantLock實現(xiàn)公平鎖和非公平鎖的代碼

class Worker implements Runnable {
    private final Lock lock;
    private final String name;

    public Worker(Lock lock, String name) {
        this.lock = lock;
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            lock.lock();
            try {
                System.out.println(name + " 獲得鎖,正在執(zhí)行任務(wù) " + i);
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
                System.out.println(name + " 釋放鎖");
            }
        }
    }
}

public class FairAndUnFair {
    public static void main(String[] args) {
        // 創(chuàng)建公平鎖
        Lock fairLock = new ReentrantLock(true);
        // 創(chuàng)建非公平鎖
        Lock unfairLock = new ReentrantLock(false);

        // 使用公平鎖
        System.out.println("使用公平鎖:");
        Thread t1 = new Thread(new Worker(fairLock, "線程1"));
        Thread t2 = new Thread(new Worker(fairLock, "線程2"));
        t1.start();
        t2.start();
        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 使用非公平鎖
        System.out.println("\n使用非公平鎖:");
        t1 = new Thread(new Worker(unfairLock, "線程1"));
        t2 = new Thread(new Worker(unfairLock, "線程2"));
        t1.start();
        t2.start();
    }
}

在這個示例中,ReentrantLock構(gòu)造函數(shù)的參數(shù)true表示創(chuàng)建公平鎖,false表示創(chuàng)建非公平鎖。

適用場景

  • 公平鎖:適用于對公平性要求較高的場景,如任務(wù)調(diào)度系統(tǒng),需要保證每個任務(wù)都能按順序執(zhí)行。
  • 非公平鎖:適用于對性能要求較高,且對公平性要求較低的場景,如高并發(fā)的緩存系統(tǒng)。

到此這篇關(guān)于java中ReentrantLock實現(xiàn)公平鎖和非公平鎖的文章就介紹到這了,更多相關(guān)java ReentrantLock公平鎖和非公平鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java遞歸實現(xiàn)科赫雪花

    java遞歸實現(xiàn)科赫雪花

    這篇文章主要為大家詳細介紹了java遞歸實現(xiàn)科赫雪花,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 使用Spring SseEmitter實現(xiàn)服務(wù)端推送的示例代碼

    使用Spring SseEmitter實現(xiàn)服務(wù)端推送的示例代碼

    SseEmitter 是 Spring MVC 4.2+ 引入的一個類,專門用于實現(xiàn) Server-Sent Events (SSE),相比于 WebSocket,SSE 更輕量(基于 HTTP 協(xié)議),且支持自動重連,所以本文給大家介紹了如何使用Spring SseEmitter實現(xiàn)服務(wù)端推送,需要的朋友可以參考下
    2026-02-02
  • 如何實現(xiàn)廣告彈窗觸達頻率的控制?

    如何實現(xiàn)廣告彈窗觸達頻率的控制?

    這篇文章主要介紹了如何實現(xiàn)廣告彈窗觸達頻率的控制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Java實用工具庫commons-lang3的使用

    Java實用工具庫commons-lang3的使用

    Apache?Commons?Lang?3是一個流行的Java實用工具庫,提供了對java.lang包的擴展,包括字符串操作、正則表達式處理、數(shù)字操作、日期和時間操作、隨機字符串生成和對象操作等功能
    2025-03-03
  • Java8新特性 StreamAPI實例詳解

    Java8新特性 StreamAPI實例詳解

    這篇文章主要為大家介紹了Java8新特性 StreamAPI實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 測量Java對象所占內(nèi)存大小方式

    測量Java對象所占內(nèi)存大小方式

    這篇文章主要介紹了測量Java對象所占內(nèi)存大小方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java最全文件操作實例匯總

    Java最全文件操作實例匯總

    這篇文章主要介紹了Java最全文件操作,總結(jié)分析了大量實例,詳細匯總了Java針對文件的各種常用操作,需要的朋友可以參考下
    2015-11-11
  • maven解決依賴沖突的三種解決方法

    maven解決依賴沖突的三種解決方法

    依賴沖突是指項目依賴的某一個jar包,有多個不同的版本,因而造成了包版本沖突,本文主要介紹了maven解決依賴沖突的三種解決方法,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Hibernate Validation自定義注解校驗的實現(xiàn)

    Hibernate Validation自定義注解校驗的實現(xiàn)

    這篇文章主要介紹了Hibernate Validation自定義注解校驗的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Spring項目中如何自定義序列化工具

    Spring項目中如何自定義序列化工具

    這篇文章主要為大家詳細介紹了Spring項目中自定義序列化工具的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12

最新評論

屏东县| 施秉县| 雅安市| 枣强县| 漳州市| 辉县市| 邹城市| 名山县| 龙泉市| 兰西县| 谷城县| 中方县| 鱼台县| 盐山县| 丰宁| 古丈县| 四子王旗| 新沂市| 南涧| 天水市| 台山市| 永城市| 五台县| 吴堡县| 囊谦县| 南部县| 通许县| 霍林郭勒市| 弋阳县| 永清县| 新建县| 宁强县| 厦门市| 韩城市| 文成县| 武功县| 高雄县| 许昌市| 通江县| 沧州市| 淮阳县|