`
xglv2013
  • 浏览: 38006 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Java里的Semaphore信号量模拟顾客逛Coach店

    博客分类:
  • Java
阅读更多
    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)));
		}
	}
	
}
2
0
分享到:
评论

相关推荐

    java并发之Semaphore信号量.md

    Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...

    使用信号量(Semaphore)实现线程的同步

    使用信号量,可以实现多个读者同时读取,而写入时阻塞所有读写操作。 - **哲学家就餐问题**:五个哲学家围坐一桌,每个人需要同时拿起左右两边的筷子才能吃饭。通过信号量,可以防止他们同时拿起筷子导致死锁。 在...

    Java中Semaphore(信号量)的使用方法

    Java中Semaphore(信号量)的使用方法 Semaphore(信号量)是一种非常重要的并发访问控制机制,它可以用来保护一个或者多个共享资源的访问。Semaphore内部维护了一个计数器,其值为可以访问的共享资源的个数。一个...

    Java进程信号量机制的实验程序

    在Java中,信号量由`java.util.concurrent.Semaphore`类实现,它提供了两种类型:可重用的二进制信号量和计数信号量。 1. **信号量的原理**: - 信号量是一个整数值,表示可用资源的数量。当线程需要使用资源时,...

    JAVA多线程--信号量(Semaphore)_.docx

    JAVA多线程--信号量(Semaphore) 信号量(Semaphore)是一种多线程环境下的设施,负责协调各个线程,以保证它们能够正确、合理地使用公共资源。从概念上讲,信号量维护了一个许可集。 信号量的类型有两种:单值信号...

    Java并发编程Semaphore计数信号量详解

    Java并发编程Semaphore计数信号量详解 Java并发编程中,Semaphore(信号量)是一种高效的同步机制,允许一定数量的线程访问某个资源。在本文中,我们将详细介绍Java并发编程Semaphore计数信号量的工作原理和应用。 ...

    async-semaphore:基于Java并发信号量的计数信号量

    基于 Java 的并发信号量的计数信号量。 安装 通过 npm 安装模块: npm install async-semaphore 快速示例 // fairness false var Semaphore = require ( 'async-semaphore' ) ; var semaphore = new Semaphore ( ...

    c语言信号量的使用实例

    ### c语言信号量的使用实例 #### 一、信号量的基本概念 信号量是一种用于解决进程间同步问题的机制,在多线程或多进程环境中尤为重要。它通过控制共享资源的访问来避免竞态条件,确保数据的一致性。信号量本质上是...

    JAVA 多线程之信号量(Semaphore)实例详解

    **JAVA 多线程之信号量Semaphore实例详解** 在Java多线程编程中,信号量Semaphore是一种非常重要的同步工具,用于控制对公共资源的访问。Semaphore类位于`java.util.concurrent`包下,它允许我们限制同时访问特定...

    vxworks多任务(task和semaphore信号量及事件)例程.zip

    资源包含了vxworks多任务(task和semaphore信号量及事件)的相关编程例子,通过创建多任务的简单例子,帮助大家了解taskSpawn函数、信号量semaphore、以及事件event的使用方法。

    Java 信号量编程实践

    下面是一个简单的Java Semaphore使用示例,模拟了一个只有两个车位的停车场: ```java import java.util.concurrent.Semaphore; public class ParkingLot { private Semaphore semaphore = new Semaphore(2); ...

    Java 信号量Semaphore的实现

    Java 信号量Semaphore的实现 Java 信号量Semaphore是Java并发编程中的一种机制,用于控制多个线程的并发执行。Semaphore的实现主要是通过计数器来实现的,每个Semaphore对象都维护着一个计数器,用于记录当前可用的...

    java同步互斥信号量问题

    在Java中,我们可以使用`java.util.concurrent.Semaphore`类来实现信号量。创建一个信号量时,可以指定初始许可证的数量。以下是一个简单的示例: ```java import java.util.concurrent.Semaphore; public class ...

    iOS GCD中级篇 - dispatch_semaphore(信号量)的理解及使用1

    以下是一个简单的例子,展示了如何使用信号量来控制同时执行的任务数量。在这个例子中,我们创建了一个信号量,初始值为2,然后启动了3个并发任务。每个任务在执行前都会调用`dispatch_semaphore_wait`获取信号量,...

    信号量的应用

    在使用信号量时,需要注意信号量的初始化和释放,确保信号量的正确使用。同时,也需要注意信号量的分类和操作,以便更好地使用信号量。 信号量是一种重要的同步机制,在多线程环境下可以用于保证资源的安全使用。...

    信号量同步等待机制 semaphore wait-and-signal

    我们不仅需要使用互斥锁来保护队列的访问,还需要使用信号量来确保队列不会溢出或空闲。 ```plaintext // 初始化信号量 int empty = N; int full = 0; // 生产者函数 void producer() { while (true) { ...

    c++多线程同步——信号量

    以下是一个简单的MFC工程中使用信号量的步骤: 1. 定义信号量:在类中声明一个`HANDLE`类型的成员变量,用于存储信号量句柄。 2. 初始化信号量:在类的构造函数中,调用`CreateSemaphore`函数初始化信号量,指定...

    semaphore控制多线程循序执行

    Semaphore(信号量)是一种经典的同步机制,它源自于荷兰计算机科学家Edsger W. Dijkstra提出的银行家算法。本示例中,我们将深入探讨如何使用Semaphore来控制多线程的循序执行。 Semaphore是一种计数信号量,它...

    Java编程技巧(信号量,管道)

    在Java中,可以自定义一个名为`mySemaphore`的类来模拟信号量。这个类通常包含两个核心方法:`P()`(代表"PROCedure"或"Pass")和`V()`(代表"VERSus"或"Value increment")。`P()`方法用于尝试获取资源,如果资源不...

    python线程信号量semaphore使用解析

    这篇文章主要介绍了python线程信号量semaphore使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.semaphore信号量原理 多线程同时运行,能提高程序的...

Global site tag (gtag.js) - Google Analytics