1.Semaphore的作用:作用就相当于保安,只能允许固定几个线程进去,一旦线程获得许可达到最大值,那么其它线程就只能陷入等待之中
2.服务场景:
3.实例:
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
public class SemaphoreTest {
public static void main(String[] args) {
//只允许有3个容量
Semaphore semaphore=new Semaphore(3);
//让10个人进入博物馆
for (int i = 0; i <10 ; i++) {
int finalI = i;
new Thread(){
@Override
public void run() {
try {
//获取许可进入博物馆
semaphore.acquire();
System.out.println("游客:"+ finalI +"正在参观");
//参观中
TimeUnit.SECONDS.sleep(3);
//参观完毕
System.out.println("游客:"+ finalI +"参观参观完毕");
//释放掉许可,让下一个线程进入
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
}
}
结果: