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離開了車位
可以用於限流場景