最新国产好看的视频,伊人天堂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é)習(xí)Java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java適配器模式定義與用法示例

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

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

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

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

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

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

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

    這篇文章主要給大家介紹了關(guān)于Java 9中如何對IntegerCache進行修改的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或使用java9具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧。
    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é)習(xí)Java九大內(nèi)置對象

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

    學(xué)習(xí)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é)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論

深泽县| 嘉善县| 长兴县| 蓬安县| 历史| 通榆县| 日照市| 九寨沟县| 板桥市| 武宁县| 东丰县| 青田县| 余姚市| 山西省| 荃湾区| 新余市| 金沙县| 高尔夫| 江津市| 稷山县| 邵武市| 陕西省| 伊金霍洛旗| 石嘴山市| 晋宁县| 南昌县| 长泰县| 百色市| 镇原县| 寿宁县| 苏尼特右旗| 宣汉县| 鲁甸县| 白朗县| 综艺| 定州市| 西乌珠穆沁旗| 彩票| 称多县| 汶川县| 泰州市|