Java实现流控-Semaphore

网上类似文章很多,不多说,直接上代码:

[java]  view plain  copy
  1. /** 
  2.  * 流控类(Semaphore实现) 
  3.  *  
  4.  * @author ln 
  5.  * 
  6.  */  
  7. public class FlowControl {  
  8.   
  9.     /** 
  10.      * 最大访问量 
  11.      */  
  12.     private static final int MAX_ACCESS_COUNT = 20;  
  13.   
  14.     /** 
  15.      * 只能有MAX_ACCESS_COUNT个线程数同时访问 
  16.      */  
  17.     private static final Semaphore semaphore = new Semaphore(MAX_ACCESS_COUNT);  
  18.   
  19.     public static void main(String[] args) {  
  20.         // 线程池  
  21.         ExecutorService exec = Executors.newCachedThreadPool();  
  22.   
  23.         // 模拟30个客户端  
  24.         for (int i = 0; i < 30; i++) {  
  25.             Runnable run = new Runnable() {  
  26.                 @Override  
  27.                 public void run() {  
  28.                     try {  
  29.                         // 1秒钟内得不到许可,则丢弃访问。  
  30.                         if (semaphore.tryAcquire(1, TimeUnit.SECONDS)) {  
  31.                             System.out.println("正在执行...");  
  32.                             //做一些事情...  
  33.                             Thread.sleep(2 * 1000);  
  34.                             System.out.println("执行完毕!");  
  35.                         } else {  
  36.                             System.out.println("访问被拒绝!!!");  
  37.                         }  
  38.                     } catch (InterruptedException e) {  
  39.                         e.printStackTrace();  
  40.                     } finally {  
  41.                         // 执行完成,释放许可。  
  42.                         semaphore.release();  
  43.                     }  
  44.                 }  
  45.             };  
  46.             exec.execute(run);  
  47.         }  
  48.   
  49.         // 关闭线程池  
  50.         exec.shutdown();  
  51.     }  
  52. }  



转自 : https://blog.csdn.net/hyxhbj1/article/details/72847048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值