亲宝软件园·资讯

展开

Java工具类Semaphore Java并发编程之工具类Semaphore的使用

小志的博客 人气:0
想了解Java并发编程之工具类Semaphore的使用的相关内容吗,小志的博客在本文为您仔细讲解Java工具类Semaphore的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Java工具类Semaphore,Java常用工具类,下面大家一起来学习吧。

一、Semaphore的理解

二、Semaphore类中常用方法

在这里插入图片描述

三、Semaphore类的使用示例

使用场景:
停车场容纳总停车量5,
停车场剩余车位不足时,车辆只能在外面等待。
每有一辆车驶出停车场后,显示牌的剩余车位数响应的加1。
当一辆车进入停车场后,显示牌的剩余车位数响应的减1.

1.代码

package com.xz.thread.Semaphore;

import java.util.Random;
import java.util.concurrent.Semaphore;

/**
 * @description:  停车场容纳总停车量5,
 *                停车场剩余车位不足时,车辆只能在外面等待。
 *                每有一辆车驶出停车场后,显示牌的剩余车位数响应的加1。
 *                当一辆车进入停车场后,显示牌的剩余车位数响应的减1.
 * @author: xz
 * @create: 2021-05-31 21:03
 */
public class Demo {

    //停车场停车方法
    public void stopCar(Semaphore  semaphore){
        System.out.println(Thread.currentThread().getName()+" 来到停车场。");

        if(semaphore.availablePermits()==0){
            System.out.println("车位不足,请耐心等待。。。。");
        }

        //获取令牌尝试进入停车场
        try {
            semaphore.acquire();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(Thread.currentThread().getName()+" 成功进入停车场。");

        //模拟车辆在停车场停留的时间
        try {
            Thread.sleep(new Random().nextInt(5000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(Thread.currentThread().getName()+" 驶出停车场。");

        //释放令牌,腾出停车场车位
        semaphore.release();

    }

    public static void main(String[] args) {
        Demo d=new Demo();
        //停车场同时容纳的车辆5
        Semaphore semaphore = new Semaphore(5);

        //模拟10辆车进入停车场
        for(int i=1;i<=10;i++){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    d.stopCar(semaphore);
                }
            },i+"号车").start();
        }
    }
}

2.运行main函数,输出结果如下:

1号车 来到停车场。
3号车 来到停车场。
3号车 成功进入停车场。
7号车 来到停车场。
1号车 成功进入停车场。
7号车 成功进入停车场。
2号车 来到停车场。
2号车 成功进入停车场。
8号车 来到停车场。
8号车 成功进入停车场。
4号车 来到停车场。
车位不足,请耐心等待。。。。
6号车 来到停车场。
车位不足,请耐心等待。。。。
5号车 来到停车场。
车位不足,请耐心等待。。。。
9号车 来到停车场。
车位不足,请耐心等待。。。。
10号车 来到停车场。
车位不足,请耐心等待。。。。
8号车 驶出停车场。
4号车 成功进入停车场。
4号车 驶出停车场。
6号车 成功进入停车场。
3号车 驶出停车场。
5号车 成功进入停车场。
1号车 驶出停车场。
9号车 成功进入停车场。
7号车 驶出停车场。
10号车 成功进入停车场。
2号车 驶出停车场。
6号车 驶出停车场。
10号车 驶出停车场。
5号车 驶出停车场。
9号车 驶出停车场。
  Process finished with exit code 0。

加载全部内容

相关教程
猜你喜欢
用户评论