日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
java信號量和countdownlatch怎么操作

Java中的信號量(Semaphore)和CountDownLatch是兩種常用的同步工具,它們都可以用于控制多個線程之間的并發(fā)執(zhí)行,本文將詳細介紹這兩種同步工具的使用方法。

頭屯河網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站公司2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)建站

信號量(Semaphore)

信號量是一個計數(shù)器,用于管理一組資源,它是一個整數(shù)變量,表示可用資源的數(shù)目,當一個線程需要使用資源時,它會嘗試獲取信號量,如果信號量的值大于0,那么線程就獲得一個資源并繼續(xù)執(zhí)行;否則,線程將被阻塞,直到其他線程釋放資源。

1、創(chuàng)建信號量

要創(chuàng)建一個信號量,可以使用java.util.concurrent.Semaphore類,構造函數(shù)接受一個整數(shù)參數(shù),表示初始可用資源的數(shù)量。

import java.util.concurrent.Semaphore;
public class SemaphoreExample {
    public static void main(String[] args) {
        Semaphore semaphore = new Semaphore(3); // 創(chuàng)建一個初始可用資源為3的信號量
    }
}

2、獲取和釋放資源

要獲取一個資源,可以使用acquire()方法,這個方法會阻塞當前線程,直到信號量的值大于0。

semaphore.acquire(); // 獲取一個資源

要釋放一個資源,可以使用release()方法,這個方法會增加信號量的值。

semaphore.release(); // 釋放一個資源

3、示例

下面是一個使用信號量的示例,它創(chuàng)建了兩個線程,分別打印奇數(shù)和偶數(shù),我們使用信號量來限制同時訪問共享資源的線程數(shù)量。

import java.util.concurrent.Semaphore;
public class SemaphoreExample {
    public static void main(String[] args) throws InterruptedException {
        Semaphore semaphore = new Semaphore(1); // 創(chuàng)建一個初始可用資源為1的信號量
        Thread oddThread = new Thread(new PrintOddNumbers(semaphore));
        Thread evenThread = new Thread(new PrintEvenNumbers(semaphore));
        oddThread.start();
        evenThread.start();
        oddThread.join();
        evenThread.join();
    }
}
class PrintOddNumbers implements Runnable {
    private Semaphore semaphore;
    private int count = 1;
    public PrintOddNumbers(Semaphore semaphore) {
        this.semaphore = semaphore;
    }
    @Override
    public void run() {
        try {
            semaphore.acquire(); // 獲取信號量,確保只有一個線程可以訪問共享資源
            while (count <= 10) {
                System.out.println("奇數(shù):" + count);
                count += 2;
                semaphore.release(); // 釋放信號量,允許其他線程訪問共享資源
                semaphore.acquire(); // 再次獲取信號量,確保只有一個線程可以訪問共享資源
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            semaphore.release(); // 最后釋放信號量,確保所有線程都可以訪問共享資源
        }
    }
}
class PrintEvenNumbers implements Runnable {
    private Semaphore semaphore;
    private int count = 2;
    public PrintEvenNumbers(Semaphore semaphore) {
        this.semaphore = semaphore;
    }
    @Override
    public void run() {
        try {
            semaphore.acquire(); // 獲取信號量,確保只有一個線程可以訪問共享資源
            while (count <= 10) {
                System.out.println("偶數(shù):" + count);
                count += 2;
                semaphore.release(); // 釋放信號量,允許其他線程訪問共享資源
                semaphore.acquire(); // 再次獲取信號量,確保只有一個線程可以訪問共享資源
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            semaphore.release(); // 最后釋放信號量,確保所有線程都可以訪問共享資源
        }
    }
}

CountDownLatch(倒計時鎖存器)

CountDownLatch是一個同步輔助類,它允許一個或多個線程等待其他線程完成操作,它的主要方法是countDown()await()。countDown()方法用于減少倒計時鎖存器的計數(shù)值,而await()方法用于等待倒計時鎖存器的計數(shù)值為0,當計數(shù)值為0時,所有等待的線程將被喚醒,倒計時鎖存器的計數(shù)值只能被初始化一次,且之后不能被重置,如果需要重置計數(shù)值,可以創(chuàng)建一個新的倒計時鎖存器對象。

1、創(chuàng)建CountDownLatch對象:CountDownLatch(int count),其中count是倒計時鎖存器的初始計數(shù)值,創(chuàng)建一個初始計數(shù)值為3的倒計時鎖存器:CountDownLatch countDownLatch = new CountDownLatch(3);。


當前題目:java信號量和countdownlatch怎么操作
網(wǎng)站地址:http://www.dlmjj.cn/article/dhsjeds.html