Semaphore

semaphore信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。

使用semaphore模拟6辆车墙3个车位,每辆车抢到车位后随机停留5到10秒钟

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 @   达摩克利斯之剑  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示