Semaphore原理浅析和相关面试题分析

本文通过一道面试题引入,详细介绍了Java中Semaphore类的原理和使用,包括acquire和release方法的工作机制。文章讨论了Semaphore在限流和资源访问控制中的角色,并解答了关于Semaphore的几个经典面试问题,揭示了Semaphore在特定情况下的行为。
摘要由CSDN通过智能技术生成

本文首发在个人公众号:HelloWorldEE,欢迎关注。

本篇文章的来源是这样,有一天,我一同学面试某公司回来,和我分享其被问的相关面试题。其中就有一道关于Semaphore的面试题,个人觉得比较经典,分享出来供大家参考。

具体同学和面试官的对话还原出来是这样。

面试官:现在有一个方法task,希望只能被10个线程调用,利用Java相关类,应该如何来实现?

同学:使用Java中的Semaphore类来实现,当一个线程调用方法task之前先从Semaphore申请令牌,如果申请到了,则调用task方法,调用完之后释放令牌供其他的线程使用,如果没有,则阻塞等待。

面试官:Semaphore中申请令牌、释放令牌的方法叫什么?

同学:acquire、release方法

面试官:semaphore初始化有10个令牌,11个线程同时各调用1次acquire方法,会发生什么?

同学:拿不到令牌的线程阻塞,不会继续往下运行。

面试官.semaphore初始化有10个令牌,一个线程重复调用11次acquire方法,会发生什么?

同学:稍微有点蒙,因为考虑到了锁的重入问题,不知道令牌会不会和锁一样,是可以重入的。注:笔者留给大家思考,后面会给出答案。

面试官:semaphore初始化有1个令牌,1个线程调用一次acquire方法,然后调用两次release方法,之后另外一个线程调用acquire(2)方法,此线程能够获取到足够的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值