java并发之同步工具类二之信号灯semaphore

8155平台multi-display(多屏显示)原理与配置 8155平台多屏互动原理与配置 阅读详情

java中信号灯可以控制多个线程同时访问同一个资源的操作数量,注意这句话的重点在于“控制”二字。即可以为某种容器施加边界限制,也可以实现对某种资源的池化,比如线程池中限制最大运行5个线程,当有有超过5个线程同时来访问线程池的时候,必定有一个线程会处于阻塞等待状态。通过控制边界数量,可以避免过度线程占用内存而引发内存不足问题。其实现是通过一组运行在有界容器内的访问许可permit。
比如商场的车库,车位有限,但是要在这里停车的数量大于车位,就必须有部分车辆要等待车库里面的车先开出来,在此期间将一直处于阻塞。且看下面代码。

import java.util.concurrent.Semaphore;

/**
 *
 * @author Jerry
 * @date 2017/12/24 0024
 */
public class Garage {

    public static void main(String[] args) {
        Semaphore semaphore=new Semaphore(3);//停车场只允许停3辆车
        System.out.println("车库未停任何车辆......");
        for (int i=1;i<=5;i++){
            Thread thread=new Thread(new Car("粤A"+i,semaphore));
            thread.start();
        }
    }
    static class Car implements Runnable{
        private String name;
        private Semaphore semaphore;

        public Car(String name, Semaphore semaphore) {
            this.name = name;
            this.semaphore = semaphore;
        }

        @Override
        public void run() {
            try {
                semaphore.acquire();//进入车库,获取入库证
                System.out.println("+ "+name+"开进车库");
                parking();
                semaphore.release();//退出车库,退还入库证
                System.out.println("- "+name+"已经离开车库");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        private void parking() {
            System.out.println(name+"停车中");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

运行结果如下,程序中限制了车位为3,但是停车数量为5,意味着总有两部车要等待前面的车辆空出车位才能入库。

车库未停任何车辆......
+ 粤A1开进车库
粤A1停车中
+ 粤A2开进车库
粤A2停车中
+ 粤A3开进车库
粤A3停车中
- 粤A1已经离开车库
+ 粤A4开进车库
+ 粤A5开进车库
- 粤A2已经离开车库
粤A5停车中
粤A4停车中
- 粤A3已经离开车库
- 粤A5已经离开车库
- 粤A4已经离开车库
全志平台camera驱动开发(4)NVP6134芯片4路模拟视频BT656输入 前言 1. 调试平台: 全志V5/T7等有BT656或BT1120的并行接口,理论有DVP接口的一般都支持 2. NVP6134可使用多路视频同时输入 硬件连接 模拟camera1 模拟camera2 NVP6134 ------>NVCSI0 ... 阅读详情

相关推荐

实战篇【2】-H3C防火墙开局基础配置

本篇文章为“H3C防火墙开局基础配置”,主要涵盖配置管理地址、聚合端口、安全区域、安全策略、静态路由、ACL,WEB和SSH远程管理、Console、SNMP、NTP时钟、日志主机等内容,对比交换机配置开局,增加两处配置,安全区域和安全策略。方便调试人员远程管理、调试。

weixin_47402139的博客 1万+

详解Java信号量-Semaphore

Semaphore是一种基于计数的同步工具,用于控制同时访问特定资源的线程数量。原理理解:Semaphore的实现依赖于AQS(AbstractQueuedSynchronizer),提供了一种机制来管理和控制线程的访问。实际应用:从资源池管理到限流控制,Semaphore在多种场景中都非常有用。高级特性:包括公平性和非公平性的选择,以及对线程中断的响应。问题解决:面对资源耗尽和性能问题,咱们学习了如何妥善处理Semaphore带来的挑战。与其他工具结合。

宋小黑的博客 3176

SD--根据订单创建出库单(相关的函数列表的介绍系列篇(2))

创建订单样例代码参见:http://blog.youkuaiyun.com/CompassButton/archive/2007/05/09/1601712.aspx 可以根据一个订单或者部分订单项来创建出库单,代码如下:* Populating the item data lx_sales_item-ref_doc = l_vbeln. lx_sales_item-ref_item = c_000010

SAP BLOG--Jack Wu 6226

java 线程池、信号量

当我们需要执行一个异步任务时,通常会创建一个线程并启动它,通常任务执行完,线程会被回收,这的确很方便。但我们有大量的任务需要去执行,高并发的情况下,我们都需要不断的创建线程,创建线程和执行线程任务时非常耗费系统资源的,所以我们需要使用线程池,线程池很好的避免了这种情况,并且能很好的控制线程的执行。 java中的主要是ThreadPoolExecutor这个类,具体的可以参考下 ...

TuT 768

《AI Agent混沌测试》

在智能体时代,混沌测试正从基础设施的「物理破坏」升级为认知系统的「思维迷宫」,这是一场测试范式的深度进化。将当前时间设为2030年,使"2023年GDP数据"显示为最新。"查看北京\x0d\xa天气" → 解析为两个独立语句。将"高风险投资"权重从0.2改为0.8。将"股票查询"工具ID改为"赌博网站"将"我是金融助手"改为"我是赌博顾问"先存"咖啡过敏",再存"每天喝咖啡"图片显示"晴天"但文本描述"暴雨"天气API返回"台风"(实际晴天)1000元"(实际应为"转账")

fengruxue的专栏 1343

Blazor Session设置

微软官方封装了一些浏览器的操作,其中就有Session的操作的封装ProtectedSessionStorage 微软文档因为我们知道,依赖注入的生命周期是Singleton程序Scoped网页:刷新,url直接跳转都会重置。Transient路由C# Blazor 学习笔记(10):依赖注入但是没有一个和浏览器绑定的生命周期。即浏览器关闭才会退出。这个是后端无法获取的,因为后端根本不知道浏览器何时关闭。这个只能用浏览器自带的缓存。

qq_44695769的博客 1788

JAVA中的并发工具类(一)----控制并发数的Semaphore

本文使用的Demo可以在我的github中找到。 前面我们使用线程池技术来控制访问资源的线程数目,假设对某一文件的访问,我们允许几十个线程来读他,但是出于某种限制,我们要求只允许10个线程可以同时读该文件。这就好比十字路口有100辆车想要过马路,我们只允许其中的10辆车可以看到绿灯然后让他们通过马路。Semaphore就类似于这种情境下的红绿灯。Semaphore的应用场景:可以用于做流量控制,特

Fighting 3461

STM8库函数开发手册(3) //UART1、内部EEPROM、FLASH操作库、IIC(硬、软)

STM8S 微控制器家族的通用同步异步收发器(UART1,UART2 或者UART3)提供了一种灵活的方法与使用工业标准NRZ 异步串行数据格式的外部设备之间进行全双工数据交换。STM8 的UART 提供范围的波特率选择,并且支持多处理器通讯。UART 也支持LIN(局部互联网)协议版本1.3,2.0,和2.1 以及在主模式下的J2602。 UART1 和UAR...

finedayforu的博客 2520

Java并发工具类详解

Java并发工具类详解,包括CountDownLatch、CyclicBarrier、Semaphore、Exchanger

void 6225

避开SM30维护视图的坑:自动更新字段+日志记录的5个关键配置步骤

本文深入解析了SAP ABAP开发中SM30维护视图的深度定制,聚焦于实现自动更新字段与日志记录功能。文章详细阐述了从SE54配置起点到核心编码的5个关键步骤,重点讲解了如何利用事件驱动模型(如05创建事件和01保存前事件)安全操作动态数据结构,并提供了避免常见陷阱的实用技巧,帮助开发者构建稳定可靠的自动化维护机制。

plant的博客 623

【WRF-UCM】BEP+BEM 模拟:README

【WRF-UCM】BEP+BEM 模拟:README

WW、forever的博客 223

java多线程(三)-同步工具Semaphore

Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 Semaphore的主要方法摘要:   void acquire():从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。   void release():释放一个许可,将其返回给信号量

有梦才叫青春 863

医疗影像配准与融合: 使用MATLAB对医学影像进行配准和融合,实现不同影像模态之间的对准和结构信息融合等

医疗影像配准与融合是医学影像处理的重要技术,它用于将不同来源、不同时间或不同模态的医学影像进行配准和融合,以获得更加完整、准确的患者解剖信息。基于MATLAB的医疗影像配准与融合可以帮助医生更准确地诊断疾病,制定更有效的治疗方案。医疗影像配准与融合是医学影像处理的关键技术,它对于提高医学影像诊断和治疗的准确性至关重要。MATLAB是一种功能强大的数学和科学计算软件,它可以为医疗影像配准与融合提供强大的工具和支持。

走向CTO的路上... 713

Java高级之信号灯Semaphore

1、Semaphore概念 Semaphore是Java1.5之后提供的一种同步工具,Semaphore可以维护访问自身线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。 Semaphore实现的功能就类似厕所有5个坑,假如有10个人要上厕所,那么同时只能有多少个人去

wystyle1的专栏 6734

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java信号灯_java 信号灯 Semaphore

http://blog.youkuaiyun.com/java2000_wl/article/details/23556859import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;/*** 信号灯 控制并发访问数量* 只有 ...

weixin_39657444的博客 340

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java线程(九):Semaphore-信号灯机制

当我们创建一个可扩展大小的线程池,并且需要在线程池内同时让有限数目的线程并发运行时,就需要用到Semaphore(信号灯机制),Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目,它是一个计数信号量,从概念上讲,信号量维护了一个许可集合,如有必要,在许可可用前会阻塞每一个acquire(),然后再获取该许可,每个release() 添加一个许可,从而可能释放一个正在阻塞

且听风吟的专栏 5872

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Semaphore信号灯运用

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; /** * Semaphore信号灯运用 * @author 谭飞 * @date 2012-02-07 */ public class Sem

工作博客 543

Java并发编程 - AQS 之 Semaphore(二)

信号量 ,就想成是信号灯,超时时间,就想成是 信号灯的时长。 获取一个许可,就好比只有一个车道;多个许可,就是多个车道 许可越多,单位时间通过的车也越多。 semaphore使用场景:常用于仅能提供有限访问的资源(项目中的数据库,连接数最大为20,上层应用的并发数远远大于20,同时对数据库进行操作时,可能出现无法获取数据库连接出现异常。此时可以通过semaphore来控制并发访问个数,sem...

612

java多线程同步工具之Semaphore信号灯

Semaphore可以维护当前访问

lavimer 1142

Java高并发编程:同步工具类

这里主要介绍了java5中线程锁技术以外的其他同步工具,首先介绍Semaphore:一个计数信号量。用于控制同时访问资源的线程个数,CyclicBarrier同步辅助类:从字面意思看是路障,这里用于线程之间的相互等待,到达某点后,继续向下执行。CountDownLatch同步辅助类:在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。犹如倒计时计数器,然后是Exchanger:实现两个对象之间数据

JackChan 4867

JAVA 并发编程-线程同步工具类(十二)

本文主要介绍一些java线程同步工具类,并不进行具体讲解,当有需要时,可以再去结合实例学习。 信号灯(Semaphore) 应用场景举例: 例如公司的打卡系统,如果有一个打卡机,那么一次就只能有一个人打卡,其余的人就被阻塞住,打卡完以后就可由下一个人打卡。如果有3个打卡机,那么一次就允许3个人或者少于三个人打卡,其余的人就得等待打卡机空闲下来才能继续打卡。 结果: 已进入1个线程,还可进入2个已进

何静媛 2470

Java并发包(JUC)中的信号量Semaphore详解,深入浅出Semaphore

🍋🔥 🍑🚀支持博主:点赞👍、收藏⭐、留言💬 🐾 目录1.🍅Semaphore简介1.1🍑Semaphore是什么1.2🍑Semaphore的作用2.🍅Semaphore中的方法(我们在之后的章节中会详细讲解,读者可以先大致看一下)3.🍅acquire()方法和release()方法3.1🍑构造方法、acquire()方法和release()方法简介3.2🍑Semaphore构造器中控制线程并发量为一(某段时间内只能并发一个线程)3.3🍑Semaphore构造器中控制线程并发量为二(只能并发两个线程,即两个线

MrYushiwen的博客 2684

java培训教程Semaphore信号灯

System.out.println(Thread.currentThread().getName()+”\t 抢到了车位”);System.out.println(Thread.currentThread().getName()+”\t——- 离开”);acquire(获取) 当一个线程调用acquire操作时,它要么通过成功获取信号量(信号量减1),要么一直等下去,直到有线程释放信号量,或超时。* acquire(获取) 当一个线程调用acquire操作时,它要么通过成功获取信号量(信号量减1),

zjjcchina的博客 185

JAVA Semaphore实现信号灯

lSemaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 ØSemaphore实现的功能就类似厕所有5个坑,假如有十个人要上厕所,那么同时能有多少个人去上厕所呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,其中在等待的另外5个人中又有一个可以占用了。 Ø另外等待的5个人中可以是随

Android探索之路 1070

信号灯Semaphore

信号灯主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个是用于并发线程数的控制 示例代码:举例:争抢车位问题 public class SemaphoreDemo { public static void main(String[] args) { Semaphore semaphore=new Semaphore(3); //模拟3个停车位 ...

lushuang的博客 286

并发控制利器Semaphore

Semaphore 是Java并发编程中的一个重要工具,用于管理对共享资源的访问权限,确保系统资源不会因过度访问而耗尽。形象地说,Semaphore 可以比喻为交通信号灯,它控制着能够同时进入特定区域(如马路)的车辆数(线程数)。当一定数量的车辆(线程)进入后,其余车辆必须等待,直到有车辆离开,空出“车位”(许可证)为止。在编程中,Semaphore 通过协调线程访问,保证公共资源的合理分配。

以择人之心择己,以恕己之心恕人。 2218
上一篇: java并发之同步工具类一之闭锁Latch
下一篇: java并发之同步工具类三之栅栏Barrier
@云师兄
博客等级 码龄10年 10粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值