用来限制能同时访问共享资源的线程上限。只是适合限制单机线程数量。
@Slf4j
public class SemaphoreDemo {public static void main(String[] args) {Semaphore semaphore = new Semaphore(3);for (int i = 0; i < 10; i++) {new Thread(() -> {try {semaphore.acquire();//获得此信号量log.debug("我是线程"+Thread.currentThread().getName());Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}finally {semaphore.release();//释放信号量}}).start();}}
}
Semaphore实现简单连接池,对比享元模式下的实现用wait,notify。性能和可读性显然更好。