什么是 Java 的 Semaphore?
什么是 Java 的 Semaphore?
回答重点
Semaphore (信号量)是 Java 并发包中的一个同步工具类,用于管理一组许可(permits)。每个许可可以被一个线程持有,当许可被持有时,其他线程需要等待才能获取许可。即可以限制同时访问特定资源的线程数量,确保在特定时刻只有有限数量的线程能够访问资源。
扩展知识
基本概念:
- 许可(Permits):表示可以访问资源的线程数量。
Semaphore对象内部维护了一个许可计数器,线程在访问资源时需要获取许可,访问完成后需要释放许可。 - 获取许可(Acquire):线程通过
acquire()方法尝试获取许可。如果没有足够的许可,线程将被阻塞直到有许可可用。 - 释放许可(Release):线程在完成对共享资源的访问后,通过
release()方法释放许可,使其他等待的线程可以获取许可。
它支持公平与非公平策略:
- 公平(Fair):在公平模式下,线程按照请求许可的顺序获取许可,防止线程饥饿。但公平模式可能会导致性能下降。
- 非公平(Unfair):非公平模式下,线程不保证按照请求许可的顺序获取许可,可以提高性能,但可能会导致某些线程长时间无法获取许可。
常见用法
限制访问数量:例如,限制数据库连接池中最大连接数。
1 | Semaphore semaphore = new Semaphore(10); // 允许最多10个线程访问 |
控制并发执行:例如,限制同时执行的任务数量。
1 | Semaphore semaphore = new Semaphore(5); // 允许最多5个线程同时执行任务 |
Comments