日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

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

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

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

信號(hào)量(Semaphore)

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

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

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

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

2、獲取和釋放資源

要獲取一個(gè)資源,可以使用acquire()方法,這個(gè)方法會(huì)阻塞當(dāng)前線程,直到信號(hào)量的值大于0。

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

要釋放一個(gè)資源,可以使用release()方法,這個(gè)方法會(huì)增加信號(hào)量的值。

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

3、示例

下面是一個(gè)使用信號(hào)量的示例,它創(chuàng)建了兩個(gè)線程,分別打印奇數(shù)和偶數(shù),我們使用信號(hào)量來限制同時(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)建一個(gè)初始可用資源為1的信號(hào)量
        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(); // 獲取信號(hào)量,確保只有一個(gè)線程可以訪問共享資源
            while (count <= 10) {
                System.out.println("奇數(shù):" + count);
                count += 2;
                semaphore.release(); // 釋放信號(hào)量,允許其他線程訪問共享資源
                semaphore.acquire(); // 再次獲取信號(hào)量,確保只有一個(gè)線程可以訪問共享資源
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            semaphore.release(); // 最后釋放信號(hào)量,確保所有線程都可以訪問共享資源
        }
    }
}
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(); // 獲取信號(hào)量,確保只有一個(gè)線程可以訪問共享資源
            while (count <= 10) {
                System.out.println("偶數(shù):" + count);
                count += 2;
                semaphore.release(); // 釋放信號(hào)量,允許其他線程訪問共享資源
                semaphore.acquire(); // 再次獲取信號(hào)量,確保只有一個(gè)線程可以訪問共享資源
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            semaphore.release(); // 最后釋放信號(hào)量,確保所有線程都可以訪問共享資源
        }
    }
}

CountDownLatch(倒計(jì)時(shí)鎖存器)

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

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


分享標(biāo)題:java信號(hào)量和countdownlatch怎么操作
標(biāo)題網(wǎng)址:http://m.5511xx.com/article/dhsjeds.html