问题描述:
有一个停车场只有5个车位,现在有100辆车要去抢这个5个车位,
理想情况下最多只有五辆车同时可以抢到车位,那么没有抢到车位的车只能等待,
其他的车让出车位,才有机会去使用该车位。
代码实现:
public static void main(String[] args) {
//阻塞队列
BlockingQueue<String> parks = new LinkedBlockingQueue<>(5);
parks.offer("车位一");
parks.offer("车位二");
parks.offer("车位三");
parks.offer("车位四");
parks.offer("车位五");
ExecutorService executorService = Executors.newCachedThreadPool();
//5个许可证
Semaphore semaphore = new Semaphore(5);
for (int i = 0; i < 100; i++) {
final int car = i;
Thread thread = new Thread(() -> {
try {
semaphore.acquire();
String park = parks.take();
System.out.println("车辆【" + car + "】获取到: " + park);
Thread.sleep((long) Math.random() * 2000);
semaphore.release(); //线程释放掉许可
parks.offer(park); //归还车位
System.out.println("车辆【" + car + "】离开: " + park);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
executorService.execute(thread);
}
}