JUC:04.Semaphore信号量

一、概述

在之前学习的synchronized关键字的对象锁与ReentrantLock重入锁都只能允许一个线程获取锁。而Semaphore不同,它可以允许多个线程获取锁访问资源,Semaphore常被运用在限流等应用场景。

二、常用API

构造方法

Semaphore(int permits) : 参数表示许可数量
Semaphore(int permits,boolean fair): 当fair等于true时,设置为公平信号量,默认是非公平的

常用方法

  • void acquire() throws InterruptedException:获取一个许可,当许可数量为0的时候,当前线程阻塞,该操作可以响应中断
  • void acquireUninterruptibly(int permits) :和acquire(int permits) 方法类似,只是不会响应线程中断
  • boolean tryAcquire():尝试获取1个许可,不管是否能够获取成功,都立即返回,true表示获取成功,false表示获取失败
  • boolean tryAcquire(long timeout, TimeUnit unit) throws InterruptedException:尝试在指定的时间内获取1个许可,获取成功返回true,指定的时间过后还是无法获取许可,返回false
  • void release():释放一个许可,将其返回给信号量
  • int availablePermits():当前可用的许可数

三、案例

1.简单使用

public class Demo1 {
   
    public static void main(String[] args) {
   
        Semaphore semaphore = new Semaphore(3);
        for (int i = 0; i < 10; i++) {
   
         Thread t =  new Thread(()->{
   
                try {
   
                    System.out.println(Thread.currentThread().getName()+"等待获取许可");
                    semaphore.acquire();
                    System.out.println(Thread.currentThread().getName
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值