首頁  >  文章  >  Java  >  Java函數的並發和多執行緒中Semaphore的作用是什麼?

Java函數的並發和多執行緒中Semaphore的作用是什麼?

WBOY
WBOY原創
2024-04-27 12:18:01976瀏覽

Semaphore 是Java 並發程式設計中控制多執行緒資源存取的機制,透過建立授權來實現,初始化時指定授權計數,表示執行緒可以同時存取受保護資源的數量,當執行緒嘗試存取資源時,它會嘗試取得許可證,如果沒有可用許可證,線程將被阻塞,直到許可證可用。

Java函數的並發和多執行緒中Semaphore的作用是什麼?

Java 函數的並發和多執行緒中Semaphore 的作用

Semaphore 是Java 並發程式設計中的一個重要機制,用於在多執行緒場景下控制資源的存取。它透過為保護資源的共享資料結​​構建立許可證來實現這一點。

作用原理

Semaphore 初始化時會指定一個許可證計數,該計數表示最多有多少個執行緒可以同時存取受保護的資源。當一個執行緒嘗試存取資源時,它會嘗試取得 semaphore 上的一個授權。如果可用,許可證會被授予,執行緒可以存取資源。如果沒有許可證可用,則執行緒將被阻塞,直到許可證可用為止。

實戰案例

假設我們有一個共享資源,也就是一個佇列。只有 5 個執行緒可以同時存取該佇列。我們可以使用 Semaphore 來確保這一點:

import java.util.concurrent.Semaphore;
import java.util.Queue;

public class Example {
    private static final int MAX_ACCESS_COUNT = 5;
    private static Semaphore semaphore = new Semaphore(MAX_ACCESS_COUNT);
    private static Queue<Integer> queue = new ConcurrentLinkedQueue<>();

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new Thread(() -> accessQueue()).start();
        }
    }

    private static void accessQueue() {
        try {
            // 尝试获取一个许可证
            semaphore.acquire();

            // 访问队列
            queue.add((int) (Math.random() * 100));

            // 释放许可证
            semaphore.release();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

在這個範例中,semaphore 被初始化為具有 5 個授權。這確保了最多只有 5 個執行緒可以同時存取佇列。其他執行緒將被阻塞,直到許可證可用為止。

結論

Semaphore 在控制並發存取共享資源方面非常有用。透過限制可以同時存取資源的執行緒數量,它有助於防止資料競爭和不一致。

以上是Java函數的並發和多執行緒中Semaphore的作用是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn