1. package com.yonge.lock;  

  2.   

  3. import java.util.concurrent.ExecutorService;  

  4. import java.util.concurrent.Executors;  

  5. import java.util.concurrent.Semaphore;  

  6.   

  7. /** 

  8.  * 需求:模拟一个厕所有3个坑,现在有10个人想上厕所,那么首先会有三个人进去,其他人都在外面等着,然后,三个人中有任何人先出来,那么马上又有人进去... 

  9.  * @author wb-gaoy 

  10.  * @version $Id: MySemaphore.java,v 0.1 2012-1-4 下午3:30:03 wb-gaoy Exp $ 

  11.  */  

  12. public class MySemaphore {  

  13.   

  14.     public static void main(String[] args) {  

  15.         ExecutorService service = Executors.newCachedThreadPool();  

  16.         //构造三个坑  

  17.         final Semaphore semaphore = new Semaphore(3);  

  18.         //构造十个人  

  19.         final int count = 20;  

  20.         for (int i = 0; i < count; i++) {  

  21.             Runnable runnable = new Runnable() {  

  22.                 public void run() {  

  23.                     try {  

  24.                         semaphore.acquire();  

  25.                         System.out.println("线程" + Thread.currentThread().getName() + "进入,当前 还有"  

  26.                                            + semaphore.availablePermits() + "个空坑..");  

  27.   

  28.                         Thread.sleep((long) (Math.random() * 10000));  

  29.                     } catch (InterruptedException e) {  

  30.                         e.printStackTrace();  

  31.                     } finally {  

  32.                         System.out.println("线程" + Thread.currentThread().getName() + "离开,当前 还有"  

  33.                                            + (semaphore.availablePermits() + 1) + "个空坑..");  

  34.                         semaphore.release();  

  35.                     }  

  36.                 }  

  37.             };  

  38.             service.execute(runnable);  

  39.         }  

  40.         service.shutdown();  

  41.     }  

  42. }