十四、Semaphore使用

  1. Semaphore是信号量的意思。当多个线程竞争获取多个资源时,可以有序使用。

    public class SemaphoreTest {
        public static void main(String[] args) {
            //3个资源
            Semaphore semaphore = new Semaphore(3);
            for (int i = 1; i <= 6; i++) {
                new Thread(()->{
                    try {
                        //获取一个资源
                        //如果当前没有空闲资源则等待
                        semaphore.acquire();
                        System.out.println("线程"+Thread.currentThread().getName()+"获得一个资源");
                         //休眠随机秒 模拟资源正在使用
                        TimeUnit.SECONDS.sleep(new Random().nextInt(5));
                        System.out.println("线程"+Thread.currentThread().getName()+"释放资源");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }finally {
                        //资源使用完成 释放
                        semaphore.release();
                    }
                },String.valueOf(i)).start();
            }
        }
    }
    

    执行结果

    在这里插入图片描述

  2. Semaphore使用步骤

    • 设置一个信号量

      //3个资源
      Semaphore semaphore = new Semaphore(3);
      
    • 尝试获取资源

      //获取一个资源
      //如果当前没有空闲资源则等待
      semaphore.acquire();
      
    • 释放资源

      //资源使用完成 释放
      semaphore.release();
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值