📚 分类
多线程
🕵🏽‍♀️ 问题描述
如何控制某个方法允许并发访问线程的数量?
👨‍🏫 问题讲解
  // 创建一个信号量,允许最多3个线程同时访问
  private final Semaphore semaphore = new Semaphore(3);
  // 2. 10个线程同时运行
  for (int i= 0; i < 10; i++) {
    new Thread(() -> {
      try {
        // 3.获取许可,计数-1
        semaphore.acquire();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }

      try {
         System.out.println("running...");
         try {
            Thread,sleep( millis: 1000);
         } catch (InterruptedException e){
            e.printStackTrace();
         }
         System.out.println("end...");
      } finally {
        // 4.释放许可计数+1
        semaphore.release();
      }
    }).start();
  }
🏳️‍🌈 问题总结
在多线程中提供了一个工具类Semaphore(赛莫佛),信号量。在并发的情况下,可以控制方法的访问量

1. 创建Semaphore对象,可以给一个容量
2. acquire()可以请求一个信号量,这时候的信号量个数-1
3. release()释放一个信号量,此时信号量个数+1
📖 问题信息
📈 浏览次数:12 | 📅 更新时间:2025-12-14 22:03:07
📦 创建信息
🏷️ ID:122 | 📅 创建时间:2025-01-09 22:40:06