1. 程式人生 > >Java實現流控-Semaphore

Java實現流控-Semaphore

網上類似文章很多,不多說,直接上程式碼:

  1. /** 
  2.  * 流控類(Semaphore實現) 
  3.  *  
  4.  * @author ln 
  5.  * 
  6.  */
  7. publicclass FlowControl {  
  8.     /** 
  9.      * 最大訪問量 
  10.      */
  11.     privatestaticfinalint MAX_ACCESS_COUNT = 20;  
  12.     /** 
  13.      * 只能有MAX_ACCESS_COUNT個執行緒數同時訪問 
  14.      */
  15.     privatestaticfinal Semaphore semaphore = new Semaphore(MAX_ACCESS_COUNT);  
  16.     public
    staticvoid main(String[] args) {  
  17.         // 執行緒池
  18.         ExecutorService exec = Executors.newCachedThreadPool();  
  19.         // 模擬30個客戶端
  20.         for (int i = 0; i < 30; i++) {  
  21.             Runnable run = new Runnable() {  
  22.                 @Override
  23.                 publicvoid run() {  
  24.                     try {  
  25.                         // 1秒鐘內得不到許可,則丟棄訪問。
  26.                         if (semaphore.tryAcquire(1, TimeUnit.SECONDS)) {  
  27.                             System.out.println("正在執行...");  
  28.                             //做一些事情...
  29.                             Thread.sleep(2 * 1000);  
  30.                             System.out.println("執行完畢!"
    );  
  31.                         } else {  
  32.                             System.out.println("訪問被拒絕!!!");  
  33.                         }  
  34.                     } catch (InterruptedException e) {  
  35.                         e.printStackTrace();  
  36.                     } finally {  
  37.                         // 執行完成,釋放許可。
  38.                         semaphore.release();  
  39.                     }  
  40.                 }  
  41.             };  
  42.             exec.execute(run);  
  43.         }  
  44.         // 關閉執行緒池
  45.         exec.shutdown();  
  46.     }  
  47. }  


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