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秒钟后离开车位

posted @ 2024-12-08 20:47  达摩克利斯之剑  阅读(26)  评论(0)    收藏  举报