Coach店一般只允许保持不超过某个特定数量的顾客在店里,其余的顾客要在店外等候,直到店里有顾客出来才允许进入,Java中的Semaphore信号量的用法和这个场景非常相似,下面使用Semaphore仿真顾客逛Coach店的场景。
(1)顾客类Guest:
package coachStore;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
public class Guest implements Runnable
{
//Coach店一次允许进入的顾客数量
private static final int SIZE = 10;
private static int count = 0;
private int id = count++;
//允许SIZE个顾客同时访问的信号量
private static Semaphore room = new Semaphore(SIZE, true);
private int shoppingTime;
public Guest(int shoppingTime)
{
this.shoppingTime = shoppingTime;
}
public void run()
{
try
{
System.out.println("Guest " + id + " is waiting for entering the store");
//顾客等待进入Coach店,如果店里的顾客已满,则等待(阻塞)
room.acquire();
System.out.println("Guest " + id + " entered the store and started to look around");
//线程睡眠以模拟顾客在店里逛的动作
TimeUnit.SECONDS.sleep(shoppingTime);
//顾客离开时需要签离,释放一个位置
room.release();
System.out.println("Guest " + id + " stayed for " + shoppingTime + " seconds and left");
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
(2)main类:
package coachStore;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CoachStoreDemo
{
//所有顾客的数量
final static int GUEST_QUANTITY = 100;
private static Random rand = new Random(47);
public static void main(String[] args)
{
ExecutorService exec = Executors.newCachedThreadPool();
for(int i = 0; i < GUEST_QUANTITY; i++)
{
//随机生成一个0到10之间的数字表示顾客在店里逗留的时间,启动一个顾客线程
exec.execute(new Guest(rand.nextInt(10)));
}
}
}
分享到:
相关推荐
Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...
使用信号量(Semaphore)实现线程的同步
主要介绍了Java中Semaphore(信号量)的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
基于 Java 的并发信号量的计数信号量。 安装 通过 npm 安装模块: npm install async-semaphore 快速示例 // fairness false var Semaphore = require ( 'async-semaphore' ) ; var semaphore = new Semaphore ( ...
资源包含了vxworks多任务(task和semaphore信号量及事件)的相关编程例子,通过创建多任务的简单例子,帮助大家了解taskSpawn函数、信号量semaphore、以及事件event的使用方法。
主要介绍了Java并发编程Semaphore计数信号量详解,具有一定参考价值,需要的朋友可以了解下。
这篇文章主要介绍了python线程信号量semaphore使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.semaphore信号量原理 多线程同时运行,能提高程序的...
Semaphore Semaphore分为单值和多值两种,前者只能被一个线程获得,...单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”,这可应用于死锁恢复的一些场
主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
JAVA多线程--信号量(Semaphore)_.docx
关于Android变成中的信号量semaphore,在使用过程中我们往往搞不清楚其信号量的申请和使用。这里主要针对信号量初始值为零的情况做介绍,其他情况不做讨论。初始值为零的情况较少使用,部分代码中的这个情况往往让...
信号量(Semaphore)哲学家进餐问题(the dining philosophers problem)---------------------------程序
主要介绍了JAVA 多线程之信号量(Semaphore)实例详解的相关资料,需要的朋友可以参考下
信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务之间同步或临界资源的互斥访问 (临界资源指同一时刻只能有有限个访问),常用于协助一组相互竞争的任务来访问临界资源。运行机制可以理解为:信号量是...
主要介绍了Java并发编程之Semaphore(信号量)详解及实例的相关资料,需要的朋友可以参考下
Semaphore的使用及其方法的使用。
Java 信号量编程实践
在JAVA里面,我的理解是信号计数的作用,比如我想设置只能允许500个线程访问WebServer,那么如何控制500个数量哪?每来一个请求,就通过acquire()获取一个许可,然后数量自动减一,处理完成之后通过release()释放一...
难堪的一次面试: 信号量Semaphore了解过吗?没有
介绍临界资源的访问机制,有Semaphore,signal,mutex等