用来限制能同时访问共享资源的线程上限。只是适合限制单机线程数量。
@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。性能和可读性显然更好。