最新消息:欢迎各位技术大牛一起交流讨论,邮箱:gww0426@163.com

并发编程中的信号量Semaphore

Java技术 郭伟伟 44155浏览 0评论

信号量Semaphore

Semaphore表明一种信号量,用来控制某一资源被同时访问的个数。该类的构造函数接受一个int类型的参数,参数的值表明了最多被同时访问的个数(当然这个值是可以通过release方法增加的)。还有一个参数设置是否公平获得许可证,公平的话先到先得,默认是不公平许可证。

Semaphore类有以下几个重要的方法:

①   acquire和tryAcquire方法:这两个方法主要是获取一个许可证,acquire获取一个许可证(不管有没有获取到),tryAcquire获取许可证并判断是否获取到。

②   release方法发行(或释放)一个许可证,释放之后其它等待的线程就可以获取到该许可证了,注意该方法也可以增加一个许可证。

Semaphore是一个典型的生产者-消费者模式,生产者通过release方法产生许可证提供给消费者进行使用,消费者通过tryAcquire方法消费生产者产生的许可证(当然消费者使用完后可以归还,比如车位;也可以不归还,比如面包…)

Semaphore的使用场合类似于停车位:总共有N个停车位。开始的时候停车位是空的,当有车子进来时拿走一个许可证并停车,当车位被占满时其它车进来就拿不到许可证了,只能进行等候,当有车子离开时释放一个许可证,其它等候的车子就可以拿到许可证进入了。

Semaphore还可以使用在生产面包的场景:面包师每次生产出一轮面包(假定为100个),消费者购买面包。当100个都卖完的时候,其它消费者只好排队等待。至于有些消费者插队的情况,那就是公平与不公平的的信号量了。

转载请注明:郭伟伟@互联网 » 并发编程中的信号量Semaphore


发表我的评论
取消评论

使用新浪微博登陆

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址