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

Java多線程Semaphore工具的使用詳解

 更新時間:2023年05月10日 09:26:18   作者:lfsun666  
Semaphore 是一種用于控制線程并發(fā)訪問數(shù)的同步工具。它通過維護一定數(shù)量的許可證來限制對共享資源的訪問,許可證的數(shù)量就是可以同時訪問共享資源的線程數(shù)目,需要的朋友可以參考下

Semaphore 是一種用于控制線程并發(fā)訪問數(shù)的同步工具。它通過維護一定數(shù)量的許可證來限制對共享資源的訪問。 許可證的數(shù)量就是可以同時訪問共享資源的線程數(shù)目。

當一個線程需要訪問共享資源時,它必須先獲取一個許可證,如果沒有許可證可用,線程就會被阻塞,直到有一個許可證可用。 當一個線程完成了對共享資源的訪問后,它必須釋放一個許可證,以便其他線程可以獲取許可證繼續(xù)訪問共享資源。

雖然 Semaphore 主要用于限制并發(fā)訪問數(shù),但是在實際應(yīng)用中,Semaphore 還可以用于線程之間的協(xié)作,比如實現(xiàn)線程的順序執(zhí)行、線程間的消息傳遞等等。 所以,Semaphore 并不僅僅是限制并發(fā)數(shù),它還可以用于實現(xiàn)更多的線程協(xié)作場景。

import java.util.concurrent.Semaphore;
/**
 *
 Semaphore 是一種用于控制線程并發(fā)訪問數(shù)的同步工具。它通過維護一定數(shù)量的許可證來限制對共享資源的訪問。
 許可證的數(shù)量就是可以同時訪問共享資源的線程數(shù)目。
 當一個線程需要訪問共享資源時,它必須先獲取一個許可證,如果沒有許可證可用,線程就會被阻塞,直到有一個許可證可用。
 當一個線程完成了對共享資源的訪問后,它必須釋放一個許可證,以便其他線程可以獲取許可證繼續(xù)訪問共享資源。
 雖然 Semaphore 主要用于限制并發(fā)訪問數(shù),但是在實際應(yīng)用中,
 Semaphore 還可以用于線程之間的協(xié)作,比如實現(xiàn)線程的順序執(zhí)行、線程間的消息傳遞等等。
 所以,Semaphore 并不僅僅是限制并發(fā)數(shù),它還可以用于實現(xiàn)更多的線程協(xié)作場景。
 */
public class SemaphoreDemo {
    public static void main(String[] args) {
        //availablePermits(semaphore);
        tryAcquire();
    }
    private static void tryAcquire() {
        // 創(chuàng)建一個 Semaphore 對象,初始化許可證數(shù)量為 1
        Semaphore semaphore = new Semaphore(1);
        // 獲取一個許可證,獲取成功
        boolean success1 = semaphore.tryAcquire();
        System.out.println("success1: " + success1); // 輸出 true
        // 再次獲取一個許可證,獲取失敗
        boolean success2 = semaphore.tryAcquire();
        System.out.println("success2: " + success2); // 輸出 false
        // 釋放一個許可證
        semaphore.release();
        // 再次獲取一個許可證,獲取成功
        boolean success3 = semaphore.tryAcquire();
        System.out.println("success3: " + success3); // 輸出 true
    }
    private static void availablePermits() {
        // 創(chuàng)建一個 Semaphore 對象,初始化許可證數(shù)量為 3
        Semaphore semaphore = new Semaphore(3);
        System.out.println("available permits: " + semaphore.availablePermits()); // 輸出 3
        // 獲取一個許可證
        try {
            semaphore.acquire();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("worker 1 is working...");
        System.out.println("available permits: " + semaphore.availablePermits()); // 輸出 2
        // 釋放一個許可證
        semaphore.release();
        System.out.println("worker 1 has finished his work.");
        System.out.println("available permits: " + semaphore.availablePermits()); // 輸出 3
    }
}
package com.lfsun.highconcurrency000.juc.semaphore;
import java.util.concurrent.Semaphore;
/**
 * 定義了一個 SemaphoreDemo 類和一個 Worker 類。SemaphoreDemo 類中創(chuàng)建了一個 Semaphore 對象,并初始化許可證數(shù)量為 3。
 * 然后,創(chuàng)建 5 個 Worker 對象,并啟動 5 個線程。
 *
 * Worker 類實現(xiàn)了 Runnable 接口,表示線程的具體工作。
 * 在 run 方法中,首先使用 acquire 方法獲取一個許可證,表示該線程需要訪問共享資源;
 * 然后,進行一些模擬的工作,通過 sleep 方法暫停線程一段時間;最后,使用 release 方法釋放一個許可證,表示該線程已經(jīng)使用完共享資源。
 * 在輸出中可以看到,最多只有 3 個線程同時訪問共享資源。
 *
 * 需要注意的是,acquire 和 release 方法都可能拋出 InterruptedException 異常,應(yīng)該正確處理異常。
 * 另外,應(yīng)該根據(jù)實際需求調(diào)整 Semaphore 的許可證數(shù)量,以達到最優(yōu)的性能和效果。
 */
public class MySemaphoreDemo {
    public static void main(String[] args) {
        // 創(chuàng)建一個 Semaphore 對象,初始化許可證數(shù)量為 3
        Semaphore semaphore = new Semaphore(3);
        // 創(chuàng)建 5 個線程并啟動
        for (int i = 1; i <= 5; i++) {
            new Thread(new Worker(i, semaphore)).start();
        }
    }
}
class Worker implements Runnable {
    private int id;
    private Semaphore semaphore;
    public Worker(int id, Semaphore semaphore) {
        this.id = id;
        this.semaphore = semaphore;
    }
    @Override
    public void run() {
        try {
            // 獲取一個許可證
            semaphore.acquire();
            System.out.println("worker " + id + " is working...");
            // 模擬工作過程
            Thread.sleep((long) (Math.random() * 5000));
            // 釋放一個許可證
            semaphore.release();
            System.out.println("worker " + id + " has finished his work.");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

到此這篇關(guān)于Java多線程Semaphore工具的使用詳解的文章就介紹到這了,更多相關(guān)Java多線程Semaphore內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實現(xiàn)同步枚舉類數(shù)據(jù)到數(shù)據(jù)庫

    Java實現(xiàn)同步枚舉類數(shù)據(jù)到數(shù)據(jù)庫

    這篇文章主要為大家詳細介紹了Java實現(xiàn)同步枚舉類數(shù)據(jù)到數(shù)據(jù)庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 教你用springboot連接mysql并實現(xiàn)增刪改查

    教你用springboot連接mysql并實現(xiàn)增刪改查

    今天教各位小伙伴用springboot連接mysql并實現(xiàn)增刪改查功能,文中有非常詳細的步驟及代碼示例,對正在學(xué)習Java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java適配器模式定義與用法示例

    Java適配器模式定義與用法示例

    這篇文章主要介紹了Java適配器模式定義與用法,結(jié)合具體實例形式分析了java適配器模式的功能、組成、定義、使用方法及適配程度等,需要的朋友可以參考下
    2017-06-06
  • Java實現(xiàn)天天酷跑小游戲完整代碼(附源碼)

    Java實現(xiàn)天天酷跑小游戲完整代碼(附源碼)

    這篇文章主要介紹了使用Java實現(xiàn)天天酷跑(附源碼),本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 通過面試題解析 Java 類加載機制

    通過面試題解析 Java 類加載機制

    類加載是 Java 語言的一個創(chuàng)新,也是 Java 語言流行的重要原因之一。它使得 Java 類可以被動態(tài)加載到 Java 虛擬機中并執(zhí)行。下面小編和大家來一起學(xué)習一下吧
    2019-05-05
  • Java 9中如何對IntegerCache進行修改詳解

    Java 9中如何對IntegerCache進行修改詳解

    這篇文章主要給大家介紹了關(guān)于Java 9中如何對IntegerCache進行修改的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習或使用java9具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起看看吧。
    2017-12-12
  • JavaWeb實現(xiàn)mysql數(shù)據(jù)庫數(shù)據(jù)的添加和刪除

    JavaWeb實現(xiàn)mysql數(shù)據(jù)庫數(shù)據(jù)的添加和刪除

    這篇文章主要介紹了如何利用JavaWeb實現(xiàn)mysql數(shù)據(jù)庫數(shù)據(jù)的添加和刪除功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-03-03
  • 學(xué)習Java九大內(nèi)置對象

    學(xué)習Java九大內(nèi)置對象

    學(xué)習Java九大內(nèi)置對象,從現(xiàn)在開始,希望大家可以通過這篇文章可以真正的理解Java九大內(nèi)置對象,感興趣的朋友可以參考一下
    2016-05-05
  • PageHelper分頁查詢操作方法示例

    PageHelper分頁查詢操作方法示例

    這篇文章主要為大家介紹了PageHelper分頁查詢數(shù)據(jù)操作方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Java利用AQS實現(xiàn)自定義鎖

    Java利用AQS實現(xiàn)自定義鎖

    本文主要介紹了Java利用AQS實現(xiàn)自定義鎖,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-07-07

最新評論

甘孜| 莱西市| 临江市| 正镶白旗| 昭觉县| 湖口县| 内黄县| 海淀区| 青川县| 五大连池市| 凌源市| 宜宾县| 瓦房店市| 临海市| 广平县| 延川县| 晋江市| 蒲江县| 和龙市| 开江县| 区。| 河曲县| 兖州市| 通城县| 邵阳县| 汶上县| 印江| 育儿| 昔阳县| 龙井市| 会泽县| 当雄县| 如皋市| 朝阳市| 青龙| 清新县| 凉山| 宁明县| 固始县| 平罗县| 绥化市|