iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在Java中使用Semaphore工具类
  • 795
分享到

如何在Java中使用Semaphore工具类

2023-06-15 07:06:23 795人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关如何在Java中使用Semaphore工具类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、Semaphore的理解Semaphore属于java.util.c

这篇文章将为大家详细讲解有关如何在Java中使用Semaphore工具类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一、Semaphore的理解

  • Semaphore属于java.util.concurrent包;

  • Semaphore翻译成字面意思为信号量,Semaphore可以控制同时访问的线程个数,通过acquire()获取一个许可,如果没有就等待,而release()释放一个许可。

二、Semaphore类中常用方法

如何在Java中使用Semaphore工具类

  • public void acquire() 用来获取一个许可,若无许可能够获得,则会一直等待,直到获得许可。

  • public void acquire(int permits) 获取permits个许可。

  • public void release() 释放许可。注意,在释放许可之前,必须先获得许可。

  • public void release(int permits) 释放permits个许可。

  • 注:以上4个方法都会被阻塞,如果想立即得到执行结果,可以使用下面几个方法。

  • public boolean tryAcquire() 尝试获取一个许可,若获取成功,则立即放回true,若获取失败,则立即返回false

  • public boolean tryAcquire(long timeout, TimeUnit unit) 尝试获取一个许可,若在指定的时间内获取成功,则立即放回true。否则立即返回false

  • public boolean tryAcquire(int permits) 尝试获取permits个许可。若获取成功,则立即放回true,,若获取失败,则立即返回false。

  • public boolean tryAcquire(int permits, long timeout, TimeUnit unit)尝试获取permits个许可。若在指定的时间内获取成功,则立即返回true,否则则立即返回false。

  • 还可以通过availablePermits()方法得到可用的许可数目。

三、Semaphore类的使用示例

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

1.代码

package com.xz.thread.Semaphore;import java.util.Random;import java.util.concurrent.Semaphore;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。

关于如何在Java中使用Semaphore工具类就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何在Java中使用Semaphore工具类

本文链接: https://www.lsjlt.com/news/278931.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在Java中使用Semaphore工具类
    这篇文章将为大家详细讲解有关如何在Java中使用Semaphore工具类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、Semaphore的理解Semaphore属于java.util.c...
    99+
    2023-06-15
  • 如何在java中使用 Arrays工具类
    如何在java中使用 Arrays工具类?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Arrays工具类属于java中常用的工具类public static&nb...
    99+
    2023-05-31
    java arrays ava
  • 如何在Java中使用Collections工具类
    本篇文章为大家展示了如何在Java中使用Collections工具类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数...
    99+
    2023-06-14
  • 如何在Java中使用EasyExcel工具类
    今天就跟大家聊聊有关如何在Java中使用EasyExcel工具类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。常用的java框架有哪些1.SpringMVC,Spring Web M...
    99+
    2023-06-14
  • Java并发编程之工具类Semaphore的使用
    一、Semaphore的理解 Semaphore属于java.util.concurrent包; Semaphore翻译成字面意思为信号量,Semaphore可以控...
    99+
    2024-04-02
  • 如何在Java中使用Hutool工具类库
    这篇文章将为大家详细讲解有关如何在Java中使用Hutool工具类库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。HuTool 中的一些常用工具类我们引入这个工具类很简单,直接在 Mavan...
    99+
    2023-06-14
  • 如何在Springboot中使用RedisUtils工具类
    如何在Springboot中使用RedisUtils工具类?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。SpringBoot整合Redis引入Redis依赖 &l...
    99+
    2023-06-15
  • Java多线程Semaphore工具的使用详解
    目录Semaphore 是一种用于控制线程并发访问数的同步工具。它通过维护一定数量的许可证来限制对共享资源的访问。 许可证的数量就是可以同时访问共享资源的线程数目。 当一个线程需要访...
    99+
    2023-05-19
    Java 多线程 Java Semaphore
  • 如何在Java 项目中使用DateUtils日期工具类
    本篇文章为大家展示了如何在Java 项目中使用DateUtils日期工具类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。介绍在java中队日期类型的处理并不方便,通常都需要借助java.text.S...
    99+
    2023-05-31
    java dateutils dat
  • Java中的Semaphore如何使用
    目录简介简述实现原理方法介绍案例分析适用场景简介 semaphore中文意思既是信号量,它的主要功能就是用来控制某个资源同时被访问的线程数。 为了控制某块资源的并发访问量时,可以使用...
    99+
    2024-04-02
  • Java并发工具类Future如何使用
    这篇文章主要讲解了“Java并发工具类Future如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java并发工具类Future如何使用”吧!前言Future是一个接口类,定义了5个方...
    99+
    2023-06-30
  • java多线程之并发工具类CountDownLatch,CyclicBarrier和Semaphore
    目录CountDownLatchSemaphoreCyclicBarrier总结 CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作。 ...
    99+
    2024-04-02
  • Java中RedisUtils工具类的使用
    目录前言一.pom.xml引入所需依赖二.RedisUtils工具类三.如何使用工具类四.工具类中批量更新Redis Hash详解总结前言 本文将提供一个redis的工具类,可以用在...
    99+
    2024-04-02
  • FileUploadUtil工具类怎么在Java项目中使用
    本篇文章为大家展示了FileUploadUtil工具类怎么在Java项目中使用 ,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体内容如下package com.gootrip.util;impor...
    99+
    2023-05-31
    java fileuploadutil ava
  • Java中如何使用ZipUtil压缩文件工具类
    这篇文章给大家介绍Java中如何使用ZipUtil压缩文件工具类,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体如下:package com.utility.zip;import java.io....
    99+
    2023-05-30
    java
  • 如何在java中使用DateUtils工具类对时间进行转换
    本文章向大家介绍如何在java中使用DateUtils工具类对时间进行转换,主要包括如何在java中使用DateUtils工具类对时间进行转换的使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。J...
    99+
    2023-05-30
    java dateutils
  • 如何在java中封装一个JDBC工具类
    如何在java中封装一个JDBC工具类?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布...
    99+
    2023-06-14
  • jmap等命令行工具如何在java中使用
    这篇文章将为大家详细讲解有关jmap等命令行工具如何在java中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java自带命令行工具(jmap,jhat,jinfo)(1)JMAP1.作...
    99+
    2023-05-31
    java 命令行工具 jmap
  • 如何使用Semaphore
    这篇文章主要讲解了“如何使用Semaphore”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Semaphore”吧!基本信息姓名:Semaphore中文名:(计数)信号量出生日期:J...
    99+
    2023-06-15
  • Java工具类RelativeDateFormat怎么使用
    要使用Java工具类RelativeDateFormat,您可以按照以下步骤进行操作:1. 下载RelativeDateFormat...
    99+
    2023-10-20
    Java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作