Semaphore :JDK描述,通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。一句话说明了他的作用。信号量有一个虚拟的许可证池,new Semaphore(10);构造一个含有10个许可证的信号量。
acquire():获取一个许可证,在方法返回之前线程被阻塞
acquire(N):获取N个许可证,在方法返回之前线程被阻塞
release():释放1个许可证,将其返还给信号量对象
release(N):释放N个许可证,将其返还给信号量对象
最简单的例子(摘自https://www.cnblogs.com/limingluzhu/p/4870871.html)
package com.houjun.current.newClassBank; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; /** * @Author: HouJun * @Date: 2019/10/18 15:25 * @Description: 信号量最简单的测试例子 * @version: 1.0 */ public class SemphoreTest { public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); Semaphore semphore = new Semaphore(5);//包含5个许可证 for (int i = 0; i < 20; i++) { final int no = i; executorService.execute(new Runnable() { @Override public void run() { try { semphore.acquire();//获取许可 System.out.println("Accessing : "+no); Thread.sleep(2000);//等待两秒,查看输入效果 semphore.release();//访问完毕,释放 } catch (InterruptedException e) { e.printStackTrace(); } } }); } } }