Semaphore
semaphore信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。
使用semaphore模拟6辆车墙3个车位,每辆车抢到车位后随机停留5到10秒钟
public class SemaphoreDemo {
public static void main(String[] args) {
Semaphore semaphore = new Semaphore(3);//模拟3个停车位
for (int i = 0; i < 6; i++) {//模拟6辆车
final int finalI = i;
new Thread(() -> {
try {
semaphore.acquire();
System.out.println("第" + finalI + "辆车抢到车位");
int parkingTime = new Random().nextInt(5) + 5;
TimeUnit.SECONDS.sleep(parkingTime);
System.out.println("第" + finalI + "辆车停留" + parkingTime + "秒钟后离开车位");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release();
}
}, String.valueOf(i)).start();
}
}
}
控制台输出如下:
第0辆车抢到车位
第2辆车抢到车位
第1辆车抢到车位
第2辆车停留6秒钟后离开车位
第0辆车停留6秒钟后离开车位
第3辆车抢到车位
第4辆车抢到车位
第1辆车停留8秒钟后离开车位
第5辆车抢到车位
第3辆车停留7秒钟后离开车位
第4辆车停留9秒钟后离开车位
第5辆车停留8秒钟后离开车位

浙公网安备 33010602011771号