侧边栏壁纸
博主头像
xh博主等级

永远是一个学者

  • 累计撰写 15 篇文章
  • 累计创建 6 个标签
  • 累计收到 8 条评论
标签搜索

目 录CONTENT

文章目录

Semaphore

xh
xh
2023-03-14 / 0 评论 / 0 点赞 / 158 阅读 / 285 字
温馨提示:
本文最后更新于 2025-02-05,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1.简介

Semaphore信号量,它的作用能够控制同时访问特定资源的线程数量。

简单的理解成日常生活中停车场⼊⼝⽴着的那个显⽰屏,每有⼀辆车进⼊停车场显⽰屏就会显⽰剩余车位减1,每有⼀辆车从停车场出去,显⽰屏上显⽰的剩余车辆就会加1,当显⽰屏上的剩余车位为0时,停车场⼊⼝的栏杆就不会再打开,车辆就⽆法进⼊停车场了,直到有⼀辆车从停车场出去为⽌。


2.示例

public static void main(String[] args) {
    Semaphore semaphore = new Semaphore(3);

    for (int i = 0; i < 10; i++) {
        new Thread(() -> {
            try {
                // 获取执行许可证
                semaphore.acquire();

                System.out.println(Thread.currentThread().getName()+" processing... ) " + "current time:"+ System.currentTimeMillis());
                TimeUnit.SECONDS.sleep(2);

                // 归还执行许可证
                semaphore.release();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }).start();
    }
}


image-20230323103629828

从打印结果可以看到,同一时刻只有三个线程执行,只有线程执行 release() 方法后,别的线程执行 acquire() 才能拿到执行许可证。

0

评论区