Java Semaphore使用例子和流程

news2024/11/27 17:48:25

目录

    • Semaphore
    • 例子代码和输出
    • semaphore.acquire();
    • semaphore.release();

Semaphore

semaphore :

[ˈseməfɔː(r)][ˈseməfɔːr]
n.	旗语; 信号标;
v.	打旗语; (用其他类似的信号系统)发信号;
[例句]Semaphore was widely used at sea, before the advent of electricity.
在电问世以前,旗语在海上运用广泛。
[其他]	第三人称单数:semaphores 复数:semaphores 现在分词:semaphoring 过去式:semaphored 过去分词:semaphored

例子代码和输出

public class Test {

    final static int CNT = 2;
    static Semaphore semaphore = new Semaphore(CNT);

    public static void main(String[] args) throws InterruptedException {

        Runnable runnable = () -> {
            try {
                semaphore.acquire();
                // 业务处理
                TimeUnit.SECONDS.sleep(2);
                System.out.println(Thread.currentThread().getName() + ":" + " finished");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                System.out.println(Thread.currentThread().getName() + ":" + " release");
                semaphore.release();
            }
        };
        List<Thread> threads = new ArrayList<>(4);
        for(int i= 0;i<6;i++) {
            Thread thread = new Thread(runnable);
            threads.add(thread);
        }
        for(Thread thread: threads){
            thread.start();
        }
    }
}

输入如下:可以看到同时最多只有2个线程能得到执行
在这里插入图片描述

semaphore.acquire();

CAS操作消耗一个信号量;如果没有信号量可消耗了,就死循环等待了
在这里插入图片描述

semaphore.release();

在这里插入图片描述

semaphore.acquire()的反向操作。

release增加信号量;acquire减少信号量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

坚鹏:中国邮储银行金融科技前沿技术发展与应用场景第3期培训

中国邮政储蓄银行金融科技前沿技术发展与应用场景第3期培训圆满结束 中国邮政储蓄银行拥有优良的资产质量和显著的成长潜力&#xff0c;是中国领先的大型零售银行。2016年9月在香港联交所挂牌上市&#xff0c;2019年12月在上交所挂牌上市。中国邮政储蓄银行拥有近4万个营业网点…

计算机中找不到d3dcompiler47.dll怎么解决,实用解决方法推荐

d3dcompiler_47.dll是一个动态链接库文件&#xff0c;它是DirectX的一个组件。DirectX是一套用于处理多媒体数据的API&#xff0c;包括游戏和视频播放等。d3dcompiler_47.dll主要负责编译和链接顶点着色器、几何着色器和像素着色器等&#xff0c;以生成可执行文件。当DirectX无…

【Redis】深入探索 Redis 主从结构的创建、配置及其底层原理

文章目录 前言一、对 Redis 主从结构的认识1.1 什么是主从结构1.2 主从结构解决的问题 二、主从结构创建2.1 配置并建立从节点2.2.1 从节点配置文件2.2.2 启动并连接 Redis 主从节点2.2.3 SLAVEOF 命令2.2.4 断开主从关系 2.2 查看主从节点的信息2.2.1 INFO REPLICATION 命令2.…

2023年度教育部人文社会科学研究一般项目评审结果,已公布!

【SciencePub学术】 9月15日&#xff0c;教育部社科司公示了2023年度教育部人文社会科学研究一般项目评审结果&#xff0c;共3482项。 其中&#xff0c;规划基金、青年基金、自筹经费项目共3029项通过专家评审&#xff1b;西部和边疆地区项目200项&#xff0c;新疆项目20项&a…

typescript高级类型-类型兼容性

4.2类型兼容性 两种类型系统:1StructuralType System (结构化类型系统)2 NominalType System (标明类型系统)。 TS 采用的是结构化类型系统&#xff0c;也叫做 ducktyping (鸭子类型…?什么???你不明白什么叫鸭子类型? 伟大的鲁迅先生说过如果一个东西,看起来是鸭子,叫起来…

如何下载安装 SAP HANA Studio

什么是SAP HANA Studio SAP HANA Studio 是一个基于 Eclipse 的集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于以 GUI 工具的形式开发和管理 SAP HANA 数据库。 SAP HANA Studio 在客户端/开发人员计算机上运行&#xff0c;​​并连接到 SAP HANA 服务器。 SAP HA…

上位机通过Modbus转Profinet网关与CGV300变频器通讯案例

上位机通过Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;与CGV300变频器通讯的案例可以实现两个不同的通信协议之间的互联互通。在这个案例中&#xff0c;上位机通过Modbus协议与Profinet网关进行通信&#xff0c;然后通过Profinet协议与CGV300变频器进行通信。 通过…

C++中的转换构造函数

在 C/C++ 中,不同的数据类型之间可以相互转换。无需用户指明如何转换的称为自动类型转换(隐式类型转换),需要用户显式地指明如何转换的称为强制类型转换。 自动类型转换示例: int a = 6;a = 7.5 + a; 编译器对 7.5 是作为 double 类型处理的,在求解表达式时,先将 a 转换…

Python Opencv实践 - 视频目标追踪MeanShift

参考资料&#xff1a; opencv/python标定时用到的几个函数意义_criteria opencv_是三水不是泗水的博客-CSDN博客 pythonOpenCV笔记&#xff08;二十六&#xff09;&#xff1a;视频追踪&#xff08;meanshift、Camshift&#xff09;_cv2.meanshift_ReadyGo!!!的博客-CSDN博客…

9月19日作业

完成文本编辑器的保存工作-代码&#xff1a; void Widget::on_pushButton_4_clicked() {//创建保存文件对话框QString filename QFileDialog::getSaveFileName(this,"保存文件","./","All(*.*);;Text files (*.txt)");//创建一个文件对象&…

java框架-Spring-IOC

文章目录 一、组件注册包扫描组件注解0&#xff09;、 ComponentScans1&#xff09;、 RestController2&#xff09;、 Srevice3&#xff09;、 Rerpository4&#xff09;、Component 导入第三方包里的组件1&#xff09;、Configuration1&#xff09;、Bean1&#xff09;、Cond…

Vue语法--完成购物车案例

一、模版语法 1.1 插值 Vue.js 使用了基于 HTML 的模板语法&#xff0c;允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML &#xff0c;所以能被遵循规范的浏览器和 HTML 解析器解析。vue将模板编译成虚拟dom&#xff0c;结合响应系统…

9.19数电——触发器状态机第四周作业题解计数器(部分)

触发器 RS 1.输出置0 2.置1 3.输出保持不变 S&#xff1a;是置位信号&#xff0c;为1时说要置为1&#xff1b;为0时要置为0&#xff1b; R&#xff1a;是复位信号&#xff0c;为1时就要无条件置为0&#xff0c;为0时保持寄存器原状态 如果要置为0&#xff0c;必要条件…

Putty连接服务器

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

027-从零搭建微服务-搜索服务(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

华清远见第六课程day10作业

保纯 //保存按钮对应的槽函数 void Widget::on_saveBtn_clicked() {QString fileName QFileDialog::getSaveFileName(this, "保存文件", "./", "All(*.*);;Images (*.png *.xpm *.jpg);;Text files(*.txt);;XML …

PyG-GCN-Cora(在Cora数据集上应用GCN做节点分类)

文章目录 model.pymain.py参数设置注意事项运行图 model.py import torch.nn as nn from torch_geometric.nn import GCNConv import torch.nn.functional as F class gcn_cls(nn.Module):def __init__(self,in_dim,hid_dim,out_dim,dropout_size0.5):super(gcn_cls,self).__i…

【PyTorch 攻略】(6-7/7)

一、说明 本篇介绍模型模型的参数&#xff0c;模型推理和使用&#xff0c;保存加载。 二、训练参数和模型 在本单元中&#xff0c;我们将了解如何加载模型及其持久参数状态和推理模型预测。为了加载模型&#xff0c;我们将定义模型类&#xff0c;其中包含用于训练模型的神经网…

CockroachDB集群部署

CockroachDB集群部署 1、CockroachDB简介 CockroachDB(有时简称为CRDB)是一个免费的、开源的分布式 SQL 数据库&#xff0c;它建立在一个事务性和强一致性的键 值存储之上。它由 PebbleDB(一个受 RocksDB/leveldb 启发的 K/B 存储库)支持&#xff0c;并使用 Raft 分布式共识…

利用Java EE相关技术实现一个简单的Web聊天室系统

利用Java EE相关技术实现一个简单的Web聊天室系统 &#xff08;1&#xff09;编写一个登录页面&#xff0c;登录信息中有用户名和密码&#xff0c;分别用两个按钮来提交和重置登录信息。 &#xff08;2&#xff09;通过请求指派来处理用户提交的登录信息&#xff0c;如果用户名…