0
点赞
收藏
分享

微信扫一扫

Semaphore

南柯Taylor 2021-10-15 阅读 43
技术分享

Semaphore是计数信号量。Semaphore管理一系列许可证,每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证。每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而其实并没有实际的许可证这个对象,Semaphore只是维持了一个可获得许可证的数量。常用于限制获取某种资源的线程数量。



代码示例

public static void main(String[] args) {
    Semaphore semaphore = new Semaphore(3);
    for (int i = 0; i < 6; i++) {
        new Thread(() -> {
            try {
                semaphore.acquire();
                System.out.println(Thread.currentThread().getName() + " 抢到车位");
                TimeUnit.SECONDS.sleep(3);
                System.out.println(Thread.currentThread().getName() + " 停车3秒后离开车位");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                semaphore.release();
            }
        }, String.valueOf(i)).start();
    }
}

执行结果

0 抢到车位
1 抢到车位
4 抢到车位
4 停车3秒后离开车位
5 抢到车位
1 停车3秒后离开车位
2 抢到车位
0 停车3秒后离开车位
3 抢到车位
3 停车3秒后离开车位
2 停车3秒后离开车位
5 停车3秒后离开车位
举报

相关推荐

0 条评论