1.简介
Semaphore信号量,它的作用能够控制同时访问特定资源的线程数量。
简单的理解成日常生活中停车场⼊⼝⽴着的那个显⽰屏,每有⼀辆车进⼊停车场显⽰屏就会显⽰剩余车位减1,每有⼀辆车从停车场出去,显⽰屏上显⽰的剩余车辆就会加1,当显⽰屏上的剩余车位为0时,停车场⼊⼝的栏杆就不会再打开,车辆就⽆法进⼊停车场了,直到有⼀辆车从停车场出去为⽌。
2.示例
public static void main(String[] args) {
Semaphore semaphore = new Semaphore(3);
for (int i = 0; i < 10; i++) {
new Thread(() -> {
try {
// 获取执行许可证
semaphore.acquire();
System.out.println(Thread.currentThread().getName()+" processing... ) " + "current time:"+ System.currentTimeMillis());
TimeUnit.SECONDS.sleep(2);
// 归还执行许可证
semaphore.release();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}).start();
}
}

从打印结果可以看到,同一时刻只有三个线程执行,只有线程执行 release() 方法后,别的线程执行 acquire() 才能拿到执行许可证。
评论区