java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Semaphore计数信号量

Java中的Semaphore计数信号量详细解析

作者:梦断泪影

这篇文章主要介绍了Java中的Semaphore计数信号量详细解析,Semaphore 是一个计数信号量,必须由获取它的线程释放,常用于限制可以访问某些资源的线程数量,例如通过 Semaphore 限流,需要的朋友可以参考下

1.介绍

Semaphore 是一个计数信号量,必须由获取它的线程释放。

常用于限制可以访问某些资源的线程数量,例如通过 Semaphore 限流。

2.具体方法

3.实现场景

模拟停车场停车,进来一辆,指示牌减一,出去一辆,指示牌加一,当指示牌显示为0时,禁止车辆进入。

public class Test_Semaphore {
    //停车场同时容纳的车辆10
    private static Semaphore semaphore=new Semaphore(10);
    public static void main(String[] args) {
        //模拟50辆车进入停车场
        for(int i=0;i<50;i++){
            Thread thread=new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        System.out.println("===="+Thread.currentThread().getName()+"来到停车场");
                        if(semaphore.availablePermits()==0){
                            System.out.println("车位不足,请耐心等待");
                        }
                        semaphore.acquire();//获取令牌尝试进入停车场
                        System.out.println(Thread.currentThread().getName()+"成功进入停车场");
                        Thread.sleep(new Random().nextInt(10000));//模拟车辆在停车场停留的时间
                        System.out.println(Thread.currentThread().getName()+"驶出停车场");
                        semaphore.release();//释放令牌,腾出停车场车位
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            },i+"号车");
            thread.start();
        }
    }
}

到此这篇关于Java中的Semaphore计数信号量详细解析的文章就介绍到这了,更多相关Semaphore计数信号量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

阅读全文