Semaphore是Java多線程中的一個重要工具,用于控制多個線程對共享資源的訪問。Semaphore可以被看作是一個計數信號量,控制同時訪問某個資源的線程個數。
Semaphore的常用方法有以下幾個:
下面是一個使用Semaphore的示例代碼:
import java.util.concurrent.Semaphore;
public class SemaphoreExample {
public static void main(String[] args) {
// 創建Semaphore對象,指定許可的數量為3
Semaphore semaphore = new Semaphore(3);
// 創建10個線程
for (int i = 0; i < 10; i++) {
final int threadNum = i;
new Thread(() -> {
try {
// 獲取許可
semaphore.acquire();
System.out.println("Thread " + threadNum + " is running");
Thread.sleep(1000);
System.out.println("Thread " + threadNum + " is finished");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 釋放許可
semaphore.release();
}
}).start();
}
}
}
上面的代碼創建了一個Semaphore對象,并指定許可的數量為3。然后創建了10個線程,每個線程在執行之前先獲取一個許可,如果許可不可用,線程將被阻塞。執行完任務后,釋放許可,以便其它線程可以獲取許可繼續執行。
運行上面的代碼,你會發現最多只有3個線程同時在執行,其它線程會被阻塞,等待許可的釋放。這樣可以有效地控制對共享資源的訪問。