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