Java Semaphore使用例子和流程

目录

    • 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.mzph.cn/news/82772.shtml

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

相关文章

行为型模式-策略模式和责任链模式对比

一、区别&#xff1a; 目的和问题解决方式&#xff1a; 策略模式的主要目的是将一组算法或行为封装成独立的策略对象&#xff0c;并使客户端能够在运行时选择其中一个策略来执行。这种模式通常用于实现相同操作的不同算法或策略之间的切换和替换。责任链模式的主要目的是将请求…

交换机上的PoE技术

交换机的PoE代表Power over Ethernet&#xff08;以太网供电&#xff09;&#xff0c;它是一种技术&#xff0c;允许通过以太网电缆传输数据的同时为连接的设备提供电力供应。 传统上&#xff0c;网络设备&#xff08;如IP电话、无线接入点、网络摄像机等&#xff09;通常需要…

stu01-IDEA怎么创建一个HTML项目

1.打开idea&#xff0c;依次点击file→new→project 2.点击Java&#xff0c;选择你的jdk&#xff0c;没有下载的点击“Download JDK”/已经下载有JDK但在这里没显示的→点击“Add JDK”&#xff0c;选择你安装的JDK的路径&#xff0c;然后next 3.next 4.起好名字&#xff0c;我…

每日一题~二叉树的最近公共祖先

题目连接&#xff1a;236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 思路分析&#xff1a; 由题可知&#xff0c;我们需要找到 p 和 q 两个二叉树的最近公共祖先节点&#xff0c;首先我们分析一下&#xff0c;这个最近公共祖先节点…

【适用于电力系统和音频系统】计算信号的总谐波失真 (THD)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【力扣-每日一题】2560. 打家劫舍 IV

class Solution { public:bool check(vector<int> &nums,int max_num,int k){//只需要计算可以偷的房间。在满足最大值为max_num下时&#xff0c;能偷的最多的房间&#xff0c;与k值比较//如果大于K&#xff0c;说明max_num还可以缩小//如果小于看&#xff0c;说明ma…

Docker 应用部署

Docker 应用部署 一、部署MySQL 搜索MySQL镜像 拉取MySQL镜像 docker pull mysql:8.0创建容器&#xff0c;设置端口映射&#xff0c;目录映射 # 在root/home/mysql目录下创建MySQL目录用于存储MySQL数据信息 mkdir /root/home/mysql cd /root/home/mysql创建并运行 # 330…

Java中StringBuilder常见的操作方法

文章目录 1.创建字符串2.追加字符串3.替换字符串4.删除字符串5.插入字符串6.字符串反转7.其他操作 在 Java 中字符串不属于基本数据类型&#xff0c;而是对象。Java 提供了 String 类来创建和操作字符串&#xff0c;但String 类是不可变类&#xff0c;一旦一个 String 对象被创…

分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-LSTM-Attention数据分类预测&#xff0c;运行环境Matlab2021b及以…

电脑更换硬盘的时候怎么迁移系统?

为什么需要迁移系统&#xff1f; 在一些关于电脑DIY或Windows相关的论坛社区中&#xff0c;有很多人发帖询问怎么迁移系统。那么这个系统迁移&#xff0c;究竟是何含义呢&#xff1f;通俗易懂地解释一下&#xff0c;就是创建一个完整无缺的操作系统复制品&#xff0c;它与系…

Android StateFlow初探

Android StateFlow初探 前言&#xff1a; 最近在学习StateFlow&#xff0c;感觉很好用&#xff0c;也很神奇&#xff0c;于是记录了一下. 1.简介&#xff1a; StateFlow 是一个状态容器式可观察数据流&#xff0c;可以向其收集器发出当前状态更新和新状态更新。还可通过其 …

分界线-积木游戏 demo

目录 匿名信 题目描述: 输入描述 输出描述: 示例: Java实现 (期待看官能够修复一下, 害): 二、积木游戏 题目描述: 输入描述 输出描述 补充说明 示例 Java代码实现 匿名信 题目描述: 电视剧《分界线》里面有一个片段&#xff0c;男主为了向警察透露案件细节&…

【Android知识笔记】FrameWork中的设计模式

一、FrameWork中有哪些设计巧妙之处 例如: Binder调用,模糊进程边界: 屏蔽跨进程IPC通信的细节,让开发者把精力放在业务上面,无需关心进程之间的通信。Bitmap大图传输,高性能: 只传递Binder句柄,到目标进程后做内存映射,不用做大量数据拷贝,速度非常快。Zygote创建进…

前端面试话术集锦第 15 篇:高频考点(React常考进阶知识点)

这是记录前端面试的话术集锦第十五篇博文——高频考点(React常考进阶知识点),我会不断更新该博文。❗❗❗ 1. HOC 是什么?相比 mixins 有什么优点? 很多人看到高阶组件(HOC)这个概念就被吓到了,认为这东西很难,其实这东西概念真的很简单,我们先来看一个例子: func…

Python基础数据结构入门必读指南

更多资料获取 作者主页&#xff1a;涛哥聊Python 个人网站&#xff1a;涛哥聊Python 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享的是Python中常见的数据结构。 1.数组 含义&#xff1a;数组是一种有序的数据结构&#xff0c;其中的元素可以按照索引来访问。数组…

谷粒商城篇章6 ---- P193-P210 ---- 异步线程池商品详情【分布式高级篇三】

目录 1. 异步 1.1 初始化线程的 4 种方式 1.1.1 继承 Thread 1.1.2 实现 Runnable 接口 1.1.3 实现 Callable 接口 FutureTask 1.1.4 线程池 1.1.5 以上 4 种方式总结&#xff1a; 1.2 线程池详解 1.2.1 初始化线程池的 2 种方式 1.2.1.1 使用 Executors 创建 1.2…

Mybatis中传0值会匹配到非空字符串判断‘’

例子&#xff1a; 需要列表筛选禁用和启用数据 if (StringUtils.isNotEmpty(status) && !"all".equalsIgnoreCase(status)) {if (status.equalsIgnoreCase(ActiveTypeEnum.ENABLE.getCode())) {condition.put("active", 1);} else {condition.put…

嵌入式养成计划-29-网络编程----TCP与UDP的基础模型

Linux下&#xff0c;基于TCP与UDP协议&#xff0c;不同进程下单线程通信服务器 Linux下&#xff0c;基于TCP与UDP协议&#xff0c;不同进程下单线程通信服务器 六十五、TCP与UDP的基础模型 1. socket 1.1 套接字概念 最早的套接字和共享内存&#xff0c;消息队列&#xff…

一篇文章带你学会Hadoop-3.3.4集群部署

目录 ​编辑 一、Hadoop集群部署 二、基础设施配置 2.1 设置网络 2.1.1 设置主机名称 2.1.2 设置hosts配置文件 2.1.3 关闭防火墙 2.1.4 关闭selinux 2.1.5 更换语言环境 2.1.6 更换时区 2.1.7 ssh免密 2.1.7.1 生成.ssh文件夹 2.1.7.2 进入文件夹 2.1.7.3 生成密码和…

MySQL数据库查缺补漏——基础篇

MySQL数据库查缺补漏-基础篇 基础篇 net start mysql80[服务名] net stop mysql80 create database pshdhx default charset utf8mb4; 为什么不使用utf8&#xff1f;因为其字符占用三个字节&#xff0c;有四个字节的字符&#xff0c;所有需要设置为utf8mb4; 数值类型&…