public class SemaphoreTest {
public static void main(String[] args) {
//6辆车抢三个停车位
Semaphore semaphore = new Semaphore(3);
for(int i=0;i<6;i++){
new Thread(()->{
try {
semaphore.acquire();
System.out.println(Thread.currentThread().getName()+"抢到了车位");
//霸占2秒
TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName()+"离开了车位");
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
}
打印结果如下:
Thread-0抢到了车位
Thread-2抢到了车位
Thread-1抢到了车位
Thread-1离开了车位
Thread-2离开了车位
Thread-3抢到了车位
Thread-4抢到了车位
Thread-0离开了车位
Thread-5抢到了车位
Thread-3离开了车位
Thread-5离开了车位
Thread-4离开了车位
可以用于限流场景