Java中的信号量Semaphore详细解读

 更新时间:2023年11月20日 11:05:06   作者:tanxinji  
这篇文章主要介绍了Java中的信号量Semaphore详细解读,Java信号量机制可以用来保证线程互斥,创建Semaphore对象传入一个整形参数,类似于公共资源,需要的朋友可以参考下

Java中的信号量Semaphore

信号量机制可以用来保证线程互斥

创建Semaphore对象: 传入一个整形参数,类似于公共资源

常用方法:

  • acquire();获取一个公共资源,公共资源-1,如果公共资源小于等于0阻塞等待
  • acquire(int permits);获取permits个公共资源,公共资源-permits,如果公共资源<0阻塞等待
  • release();释放一个公共资源,公共资源+1
  • release(int permits);释放permits个公共资源,公共资源+permits
  • boolean tryAcquire( );尝试获取一个公共资源,可以获取返回true,不可以返回false
  • boolean tryAcquire( int permits );尝试获取permits个公共资源,可以获取返回true,不可以返回false
		Semaphore s = new Semaphore(1);
        s.acquire();
        s.release();

示例:

import java.util.concurrent.Semaphore;

public class SemaphoreTest {
    public static void main(String[] args) throws InterruptedException {
        Semaphore t = new Semaphore(1);

        new Thread(  ()->{
            try {
              t.acquire(  );  // 获取
              Thread.sleep(2000);
              System.out.println(Thread.currentThread().getName()+" 执行!");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }finally {
                t.release(); //释放
            }

        } ,"thread1" ).start();

        new Thread(  ()->{
            try {
                t.acquire();
                Thread.sleep(2000);
                System.out.println(Thread.currentThread().getName()+" 执行!");

            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                t.release(1);
            }
        } ,"thread2" ).start();



    }
}

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

相关文章

  • Java实现学生管理系统详解流程

    Java实现学生管理系统详解流程

    这篇文章主要为大家详细介绍了如何利用Java语言实现学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • idea两侧的maven-project-structure图标不见了如何解决

    idea两侧的maven-project-structure图标不见了如何解决

    这篇文章主要介绍了如何解决idea两侧的maven-project-structure图标不见了问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • java中如何把实体类转成json格式的字符串

    java中如何把实体类转成json格式的字符串

    这篇文章主要介绍了java中如何把实体类转成json格式的字符串问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 实例讲解Java的设计模式编程中责任链模式的运用

    实例讲解Java的设计模式编程中责任链模式的运用

    这篇文章主要介绍了Java的设计模式编程中责任链模式的运用,讲解了通过条件判断结构来分配不同对象的责任权限,需要的朋友可以参考下
    2016-02-02
  • java后台接受到图片后保存方法

    java后台接受到图片后保存方法

    在本篇文章里小编给大家整理了关于java后台接受到图片后怎么保存的相关知识点,需要的朋友们参考学习下。
    2019-06-06
  • Java结合uniapp实现验证码功能的示例详解

    Java结合uniapp实现验证码功能的示例详解

    UniApp 是一个基于 Vue.js 的跨平台应用开发框架,允许开发者使用统一的代码库来构建多平台应用,这篇文章将给大家介绍Java结合uniapp实现验证码功能,文中通过详细的代码示例讲解的非常详细,需要的朋友可以参考下
    2024-07-07
  • 详解Spring Cache使用Redisson分布式锁解决缓存击穿问题

    详解Spring Cache使用Redisson分布式锁解决缓存击穿问题

    本文主要介绍了详解Spring Cache使用Redisson分布式锁解决缓存击穿问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • SpringBoot使用Apache Tika实现多种文档的内容解析

    SpringBoot使用Apache Tika实现多种文档的内容解析

    在日常开发中,我们经常需要解析不同类型的文档,如PDF、Word、Excel、HTML、TXT等,Apache Tika是一个强大的内容解析工具,可以轻松地提取文档中的内容和元数据信息,本文将通过SpringBoot和Apache Tika的结合,介绍如何实现对多种文档格式的内容解析
    2024-12-12
  • SpringBoot+Jpa项目配置双数据源的实现

    SpringBoot+Jpa项目配置双数据源的实现

    本文主要介绍了SpringBoot+Jpa项目配置双数据库源的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 简述Springboot @Async 异步方法

    简述Springboot @Async 异步方法

    这篇文章主要介绍了Springboot @Async 异步方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-05-05

最新评论