【JAVA】48. Semaphore信号量控制资源并发访问
一、核心知识点详细解释
1.1 Semaphore 概述
Semaphore
是 Java 并发包 java.util.concurrent
中的一个工具类,它用于控制对有限资源的并发访问。Semaphore
内部维护了一组许可证(permit),线程在访问资源前需要先获取许可证,如果许可证数量为 0,则线程会被阻塞,直到有其他线程释放许可证。
1.2 Semaphore 的构造方法
Semaphore
有两个构造方法:
Semaphore(int permits)
:创建一个具有指定许可证数量的Semaphore
对象,默认是非公平模式。Semaphore(int permits, boolean fair)
:创建一个具有指定许可证数量的Semaphore
对象,并可以指定是否为公平模式。公平模式下,线程会按照请求许可证的顺序获取许可证;非公平模式下,线程可能会插队获取许可证。
1.3 主要方法
acquire()
:获取一个许可证,如果没有可用的许可证,则线程会被阻塞。acquire(int permits)
:获取指定数量的许可证,如果没有足够的许可证,则线程会被阻塞。release()
:释放一个许可证。release(int permits)
:释放指定数量的许可证。availablePermits()
:返回当前可用的许可证数量。
1.4 代码示例
import java.util.concurrent.Semaphore;public class SemaphoreExample {private static final int THREAD_COUNT = 5