信号量(Semaphore)为程序并发运行提供了多个通道,在此标记一下。
package multithread.semaphore; import java.security.SecureRandom; import java.util.concurrent.Semaphore; /** * 模拟超市收银 * * @author lemzhang * */ public class CasherTest { private final Semaphore available; private final String[] customers; private final SecureRandom rnd = new SecureRandom(); public CasherTest(Semaphore available,String[] customers) { this.available = available; this.customers = customers; } public void begin() { for (String customer : customers) { new Thread(new Casher(available, customer), customer).start(); } } class Casher implements Runnable { private final Semaphore sp; private final String customer; public Casher(Semaphore sp, String customer) { this.sp = sp; this.customer = customer; } @Override public void run() { try { sp.acquire(); Thread.sleep(generateWorkTimeMillis()); System.out.printf("[%s]开始结账,%s\n", customer,sp); Thread.sleep(generateWorkTimeMillis()); } catch (InterruptedException e) { e.printStackTrace(); } finally { sp.release(); System.out.printf("[%s]结账完毕.\n", customer); } } } private int generateWorkTimeMillis(){ return rnd.nextInt(5000); } public static void main(String[] args){ //模拟20个顾客排队结账 final String[] customers = new String[20]; for (int i = 0; i < 20; i++) { customers[i] = "消费者" + i; } //模拟5条收银通道 final Semaphore available = new Semaphore(5); CasherTest t = new CasherTest(available,customers); t.begin(); } }
如果想要知道某个消费者走的是哪一条收银通道,Semaphore模型好像不支持.
相关推荐
主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...
Semaphore Semaphore分为单值和多值两种,前者只能被一个线程获得,...单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”,这可应用于死锁恢复的一些场
主要介绍了Java并发编程Semaphore计数信号量详解,具有一定参考价值,需要的朋友可以了解下。
基于 Java 的并发信号量的计数信号量。 安装 通过 npm 安装模块: npm install async-semaphore 快速示例 // fairness false var Semaphore = require ( 'async-semaphore' ) ; var semaphore = new Semaphore ( ...
JAVA多线程--信号量(Semaphore)_.docx
Java 信号量编程实践
主要介绍了Java中Semaphore(信号量)的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了JAVA 多线程之信号量(Semaphore)实例详解的相关资料,需要的朋友可以参考下
主要介绍了Java并发编程之Semaphore(信号量)详解及实例的相关资料,需要的朋友可以参考下
Java并发编程(23)并发新特性—信号量Semaphore(含代码)编程开发技术共3页.pdf.zip
信号 信号量是一个非常简单的Android应用程序,可以在屏幕上显示信号量。 只是一个信号量,仅此而已。 您可以点击屏幕上的,并且指示灯会顺序切换。
信号量 Semaphore,执行器服务 ExecutorService, 线程池执行者 ThreadPoolExecutor,定时执行者服务 ScheduledExecutorService, 使用 ForkJoinPool 进行分叉和合并,锁 Lock,读写锁 ReadWriteLock 原子性长整型 ...
15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ...
使用Java Spring的信号量演示CI / CD管道示例Spring Boot应用程序和CI / CD管道显示了如何在上运行Java项目。应用概述产品特点简单的登录屏幕用户注册通过Basic身份验证层保护的端点用于在数据库中存储用户的持久层...
15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ...
信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ...
Semaphore 中文称信号量,它和ReentrantLock 有所区别,ReentrantLock是排他的,也就是只能允许一个线程拥有资源,Semaphore是共享的,它允许多个线程同时拥有资源,是AQS中共享模式的实现,在前面的AQS分析文章中,...
15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ...
15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19. 使用 ForkJoinPool 进行分叉和合并 20. 锁 Lock 21. 读写锁 ...