Semaphore
是 Java 并发包中的一个同步工具类,用于控制对共享资源的访问数量。它主要用于限制同时访问某个资源的线程数目。下面详细说明 Semaphore
的用法。
使用 Semaphore
需要以下步骤:
- 创建
Semaphore
对象:通过指定允许访问的线程数量来初始化Semaphore
对象。Semaphore semaphore = new Semaphore(permits);
- 获取许可证:在需要访问共享资源的地方,调用
acquire()
方法获取许可证。如果许可证不可用,当前线程将会被阻塞,直到有可用的许可证或者线程被中断。semaphore.acquire(); // 获取许可证
- 释放许可证:在使用完共享资源后,调用
release()
方法释放许可证,将其归还给Semaphore
。semaphore.release(); // 释放许可证
简单示例:
public class SemaphoreDemo {
public static void main(String[] args) {
// 线程数量:停车位! 限流!
Semaphore semaphore = new Semaphore(3);
for (int i = 1; i <= 7; i++) {
new Thread(() -> {
try {
semaphore.acquire(); // acquire() 得到
System.out.println(Thread.currentThread().getName() + "抢到车位");
TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName() + "离开车位");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release(); // release() 释放
}
}, String.valueOf(i)).start();
}
}
}
总结:Semaphore
可以用于控制对共享资源的访问数量,它通过维护一定数量的许可证来限制同时访问某个资源的线程数目。使用 acquire()
方法获取许可证,使用 release()
方法释放许可证。Semaphore
在并发编程中非常有用,可以用于实现资源池、线程池等场景。