package com.entel.research; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; public class JunitSemaphore { public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(5); for(int i=0;i<5;i++) { Runnable runnable = new Runnable() { @Override public void run() { try { semaphore.acquire(); System.out.println("线程" + Thread.currentThread().getName() + "进入,当前已有" + (3-semaphore.availablePermits()) + "个并发"); Thread.sleep(3000); System.out.println("线程" + Thread.currentThread().getName() + "即将离开"); semaphore.release(); //下面代码有时候执行不准确,因为其没有和上面的代码合成原子单元 System.out.println("线程" + Thread.currentThread().getName() + "已离开,当前已有" + (3-semaphore.availablePermits()) + "个并发"); } catch (Exception e) { e.printStackTrace(); } } }; executorService.execute(runnable); } } }