public static void main(String[] args) { Semaphore semaphore=new Semaphore(2,false); for(int i=0;i<10;i++){ new Thread(new Test01(semaphore)).start(); } }
2、子线程调用
public class Test01 implements Runnable{ private final Semaphore semaphore; public Test01(Semaphore semaphore) { this.semaphore=semaphore; } @Override public void run() { try { //获取许可,未获取阻塞 semaphore.acquire(); System.out.println("======我进来了"+Thread.currentThread().getName()); Thread.sleep(5000); //释放许可 semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } //} } }
线程池与信号量的区别:
信号量Semaphore是一个并发工具类,用来控制可同时并发的线程数,其内部维护了一组虚拟许可,通过构造器指定许可的数量,每次线程执行操作时先通过acquire方法获得许可,执行完毕再通过release方法释放许可。如果无可用许可,那么acquire方法将一直阻塞,直到其它线程释放许可。
原文:https://www.cnblogs.com/volare/p/14407420.html