JAVA-信号量

2023-05-16

  • 信号量:

    • 信号量一般都有以下几个变量:
      • count:记录可以使用的资源数
      • wait_list:等待信号量的队列
    • 获取信号量需要判断count是否大于零,即if( count > 0 )
      • count > 0,表示可以获取该信号量,意味着获取资源成功,无须睡眠进程
      • count == 0,表示不可以获取该信号量,需要进入等待队列中,此时等待队列长度为0,无进程等待
      • count < 0,表示不可以获取该信号量,且有Math.abs(count)个进程在等待队列等待资源.
  • 注:不可以睡眠的进程无法获取信号量

Java - demo

import java.util.Arrays;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

/**
 * @description:
 * @date: 2022/3/16
 **/
public class Test {
    public static void main(String [] args){
        // 信号量
        final Semaphore sem = new Semaphore(5);
        //线程池
        ExecutorService exec = Executors.newCachedThreadPool();
        for (int i = 0; i < 10; i++) {
            int strI = i;
            Runnable run = new Runnable() {
                @Override
                public void run(){

                    try {
                        //获取信号量
                        sem.acquire();
                        System.out.println("Thread_" + strI);
                        Thread.sleep((long)Math.random()*1000);
                        //释放信号量
                        sem.release();
                        //availablePermits()返回此Semaphore对象中当前可用的许可数,许可的数量有可能实时在改变,并不是固定的数量。
                        System.out.println("-------------------" + sem.availablePermits());
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            };
            //执行每一个线程
            exec.execute(run);
        }
        //退出线程池
        exec.shutdown();
    }

}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA-信号量 的相关文章

随机推荐

  • 现在没有可用的软件包 *** ,但是它被其它的软件包引用了 和 E: 无法定位软件包 ***问题解决

    root 64 zhouls virtual machine snort src apt get install bison flex 正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态信息 完成 现在没有可用的软件包 fl
  • sdf文件轨范

    sdf文件规范 xff1a a href https www zhihu com org aigraphx posts page 61 3 title 深圳季连AIGRAPHX 知乎 深圳季连AIGRAPHX 知乎 a span style
  • HBase基本操作

    HBase Java API 操作 Tips xff1a 其实每一个操作都可以简化为 xff1a 1 配置并连接数据库 2 编写 Java API 的 HBase 的操作 3 使用权限 执行操作 要对一个Hbase数据库进行操作的话 xff
  • GNU Radio3.8:编辑yaml文件的方法

    GNU Radio 学习使用 OOT 系列教程 xff1a GNU Radio3 8创建OOT的详细过程 基础 C 43 43 GNU Radio3 8创建OOT的详细过程 进阶 C 43 43 GNU Radio3 8创建OOT的详细过程
  • input上传图片并且实现预览

    文章目录 前言一 确定思路二 书写代码1 HTML部分2 CSS部分3 JS部分 xff08 重点 xff09 3 1 点击选择图片按钮 xff0c 调用input文件框事件的的代码3 2 转换格式3 3 发送图片给后端 三 编写优化1 i
  • hashcode()和equals()方法详解

    hashcode 和equals 方法详解 1 何为hashcode hash是一个函数 xff0c 就是通过一种算法来得到一个hash值 通过hash算法得到的hash值就存放在这张hash表中 xff0c 也就是说hash表示所有的ha
  • ubuntu安装kvm

    kvm是linux下的虚拟机 文章目录 一 电脑硬件支持二 安装ubuntu三 安装kvm 一 电脑硬件支持 首先不用多说啦 xff0c 既然是虚拟机 xff0c 当然要自己的机器支持虚拟技术 xff0c 重启机器进入biso xff0c
  • 类的静态(static)成员

    有时候类需要它的一些成员与类本身直接相关 xff0c 而不是与类的各个对象保持关联 xff08 这意味着无论创建多少个类的对象 xff0c 静态成员都只有一个副本 xff09 我们通过在成员的声明前加上关键字static使得其与类关联在一起
  • Keil uvision5 介绍

    keil 5 Keil uvision5 安装过程Keil uvision5安装包1 Keil uvision5 介绍2 Keil uVision5 特点3 Keil uVision5 功能4 Keil uVision5 快捷键 Keil
  • px4仿真时,/mavros/state现实连接不上

    仿真时 xff0c 使用px4 xff0c 启动 PX4 Firmware launch文件中的launch文件 进入gazebo世界中 xff0c 通过 xff1a rostopic list 查看发布的话题 xff0c 并且打印 mav
  • 插值方法(一维插值、三次样条插值、二维插值的matlab自带函数,python实现/作图)

    数模比赛中 xff0c 常常需要根据已知的函数点进行数据 模型的处理和分析 xff0c 而有时候现有的数据是极少的 xff0c 不足以支撑分析的进行 xff0c 这时就需要使用一些数学的方法 xff0c 模拟产生 一些新的单又比较靠谱的值来
  • ROS中常用命令

    1 xff09 工作空间初始化 xff1a catkin init workspace 2 xff09 创建功能包 xff1a catkin create pkg pkg name reply 3 xff09 编译工作空间中的功能包 xff
  • 【DL】CNN的前向传播和反向传播(python手动实现)

    卷积层的前向传播和反向传播 说明 本文中 xff0c 只实现一层卷积层的正反向传播 xff08 带激活函数Relu xff09 xff0c 实现的是多通道输入 xff0c 多通道输出的 之前对深度学习的理解大多止于pytorch里面现成的A
  • Postman使用教程详解

    目录 1 Postman安装与接口请求基本操作1 1Postman安装1 2发起一个接口请求的小测试 2 接口测试实战2 1百度IP查询接口从抓包到测试实战2 2需要设置头域的请求实战2 3文件上传与json请求实战 3 Newman命令行
  • GNU Radio3.8创建OOT的详细过程(基础/C++)

    GNU Radio 学习使用 OOT 系列教程 xff1a GNU Radio3 8创建OOT的详细过程 基础 C 43 43 GNU Radio3 8创建OOT的详细过程 进阶 C 43 43 GNU Radio3 8创建OOT的详细过程
  • Johnson-Trotter(JT)算法生成排列

    对于生成 xff5b 1 xff0c xff0c n xff5d 的所有n xff01 个排列的问题 xff0c 我们可以利用减治法 xff0c 该问题的规模减一就是要生成所有 xff08 n 1 xff09 xff01 个排列 假设这个小
  • OSMWebWizard无法使用(Address family not supported by protocol)

    根据报错信息依次打开osmWebWizard py SimpleWebSocketServer py 查看对应行号的内容 xff0c 发现Simple py中有一个socket net6 可能是网络协议的问题 xff0c 查了一下 xff0
  • 粤嵌实训笔记二

    目录 20230227 20230303 xff08 第二周 xff09 main clcd clcd hbmp cbmp hgame cgame h 20230227 20230303 xff08 第二周 xff09 1 在Linux下
  • Arduino学习笔记:FreeRTOS——ESP32多任务处理

    Arduino学习笔记 xff1a FreeRTOS ESP32多任务处理 Demo span class token comment 创建任务一和任务二的句柄 xff0c 并初始化 span TaskHandle t TASK Handl
  • JAVA-信号量

    信号量 xff1a 信号量一般都有以下几个变量 xff1a count xff1a 记录可以使用的资源数wait list xff1a 等待信号量的队列 获取信号量需要判断count是否大于零 xff0c 即if count gt 0 若c