问答题977/1053Semaphore有什么作用?

难度:
2021-11-02 创建

参考答案:

Semaphore 的作用

Semaphore(信号量)是 Java 并发包(java.util.concurrent)中的一个同步工具类,主要用来控制同时访问某个特定资源的线程数量,从而实现资源的有效管理。


Semaphore 的功能特点

  1. 限制并发线程数:可以指定允许同时访问的线程数,从而限制资源的并发使用。
  2. 实现信号量机制:通过许可(permits)的概念管理线程访问资源的数量。
  3. 线程同步:线程可以通过获取和释放信号量实现同步,确保对共享资源的访问有序。

Semaphore 的核心方法

  1. acquire():从信号量中获取一个许可。如果没有可用许可,线程会阻塞,直到有许可可用。
  2. release():释放一个许可,归还给信号量,唤醒等待的线程。
  3. 构造方法
    • Semaphore(int permits):创建具有指定许可数的信号量,默认为非公平模式。
    • Semaphore(int permits, boolean fair):创建具有指定许可数的信号量,并指定是否为公平模式。

Semaphore 的使用场景

  1. 限制并发访问:例如限制一个数据库连接池的最大连接数,或者限制同时访问某个服务的线程数量。
  2. 实现资源池:例如限制线程同时访问某些资源,如文件、网络连接等。
  3. 实现生产者-消费者模式:使用信号量协调生产者和消费者的运行。

Semaphore 的公平与非公平模式

  • 非公平模式(默认):线程竞争许可时,不保证获取许可的顺序,性能较高。
  • 公平模式:按照线程请求许可的顺序获取许可,实现先到先得,但性能略低。

代码示例

1Semaphore semaphore = new Semaphore(3, true); // 公平模式

最近更新时间:2024-12-06