java Semaphore

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了java Semaphore脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

semaphore简介

SEMaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。Semaphore可以用来构建一些对象池,资池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两种互斥状态。它的用法如下:
availablePErmITs函数用来获取当前可用的资源数量
wc.acquire(); //申请资源
wc.release();// 释放资源

public Semaphore(int permits,boolean fair)
permits:初始化可用的许可数目。
fair: 若该信号量保证在征用时按FIFO的顺序授予许可,则为true,否则为false

例子

餐厅2个座位,但是有3个人要等位就餐

public class SemaphoreThread extends Thread {     private String name;     private Semaphore semaphore;      public SemaphoreThread(String name, Semaphore semaphore) {         this.name = name;         this.semaphore = semaphore;     }      @Override     public void run() {         if (semaphore.availablePermits() <= 0) {             System.out.println(name + "等位中。。。");         }         try {             semaphore.acquire();             System.out.println(name + "开始就餐了。。");             Thread.sleep(new Random().nextInt(1000));         } catch (InterruptedException e) {             e.printStackTrace();         }         System.out.println(name + "完了。。");         semaphore.release();     } }

请求:

@RequestMapping("test-semaphore")     public void testSemaphore() {         Semaphore semaphore = new Semaphore(5);         for (int i = 1; i <= 10; i++) {             new SemaphoreThread("第" + i + "个人", semaphore).start();         }     }

结果:
第1个人开始就餐了。。
第2个人开始就餐了。。
第3个人等位中。。。
第1个人吃完了。。
第3个人开始就餐了。。
第2个人吃完了。。
第3个人吃完了。。

脚本宝典总结

以上是脚本宝典为你收集整理的java Semaphore全部内容,希望文章能够帮你解决java Semaphore所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。