public class QueueManagementSystemBlockingQueue {
public static void main(String[] args) throws InterruptedException {
Center1 center = new Center1();
ExecutorService exec = Executors.newCachedThreadPool();
Producerr1 producer = new Producerr1(center);
Consumerr1 consumer = new Consumerr1(center);
exec.execute(producer);
for (int i = 0; i < 10; i++) {
exec.execute(consumer);
}
TimeUnit.SECONDS.sleep(10);
exec.shutdown();
}
}
class Producerr1 implements Runnable {
private Center1 center;
public Producerr1(Center1 center) {
this.center = center;
}
@Override
public void run() {
while (!Thread.interrupted()) {
center.produce();
}
}
}
class Consumerr1 implements Runnable {
private Center1 center;
public Consumerr1(Center1 center) {
this.center = center;
}
@Override
public void run() {
while (!Thread.interrupted()) {
center.consume();
}
}
}
class Center1 extends Thread {
private final static int MAXCOUNT = 10;
private BlockingQueue<Waiter1> waiters;
private BlockingQueue<Customerr1> customers;
private Random rand = new Random(47);
private final static int PRODUCERSLEEPSEED = 100;
private final static int CONSUMERSLEEPSEED = 10000;
public Center1() {
this.waiters = new LinkedBlockingQueue<Waiter1>(MAXCOUNT);
for (int i = 0; i < MAXCOUNT; i++) {
waiters.add(new Waiter1());
}
this.customers = new LinkedBlockingQueue<Customerr1>();
/*for (int j = 0; j < 20; j++) {
this.customers.add(new Customerr1());
}*/
}
public void produce() {
try {
TimeUnit.MILLISECONDS.sleep(rand.nextInt(PRODUCERSLEEPSEED));
} catch (InterruptedException e) {
e.printStackTrace();
}
this.customers.add(new Customerr1());
}
public void consume() {
try {
// 服务窗口可用
Waiter1 waiter = this.waiters.take();
this.waiters.remove(waiter);
// 客户可用
Customerr1 customer = this.customers.take();
this.customers.remove(customer);
// Do sth....
System.out.println(waiter + "正在为" + customer + "服务...");
TimeUnit.MILLISECONDS.sleep(rand.nextInt(CONSUMERSLEEPSEED));
this.waiters.add(waiter);
} catch (InterruptedException e) {
System.err.println("---" + e.getMessage());
}
}
}
class Waiter1 {
private final int id = counter++;
private static int counter = 1;
@Override
public String toString() {
if (id > 9)
return "Waiter [id=" + id + "]";
return "Waiter [id=0" + id + "]";
}
}
class Customerr1 {
private final int id = counter++;
private static int counter = 1;
@Override
public String toString() {
if (id > 9) {
return "Customer [id=" + id + "]";
}
return "Customer [id=0" + id + "]";
}
}
分享到:
相关推荐
模拟银行叫号系统,十分好,有详细的实验报告和题目
银行叫号系统:由于比较繁杂,做一个简化版本,实现普通矿口、VIP窗口、对公窗口的排队(队列)、叫号(出队)、窗口服务等功能,关于时间序列的部分,可以简单的用计数累加来实现。
基于SSM的银行排队叫号系统源码基于SSM的银行排队叫号系统源码基于SSM的银行排队叫号系统源码基于SSM的银行排队叫号系统源码基于SSM的银行排队叫号系统源码基于SSM的银行排队叫号系统源码基于SSM的银行排队叫号系统...
实现一个简单银行叫号模拟系统。银行有三个窗口可以同时办理业务,当有用户到达银行时,首先选择则既要办理的业务,可以选择一种或多种。系统计算办理此业务所需的时间并显示给用户,然后系统查看有无空闲的窗口,...
银行叫号系统 很细致的描述了叫号的序列 有框图的解释
采用双51单片机,文件有代码+proteus仿真,双机串口通信,实现6窗口银行叫号系统,采用LCD12864显示
基于51单片机模拟银行叫号系统仿真设计资料 包含源程序及仿真文件
系统能模拟出银行叫号机的叫号及显示功能,同时显示出顾客到号码和窗口号,为顾客起指示作用。
使用GUI实现银行排队叫号系统 模拟实现银行业务调度系统逻辑,具体需求如下: • 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 • 有三种对应类型的客户:VIP客户,...
Java项目之基于jspm银行排队叫号系统(源码 + 演示视频) 开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/...
银行排队叫号系统源码,若发现bug,欢迎指正,谢谢。操作系统是windows,开发工具vs2008
此为我个人开发的银行叫号系统,采用多线程机制。全程模仿银行的叫号过程,程序自动运行
模拟银行叫号流程 1.共6个窗口:1-4普通窗口 5是快速窗口 6是VIP窗口 2.三种用户:普通用户,快速用户,VIP用户 3.按【1:6:3】的概率每隔一段随机的时间产生一个类型的客户 4.窗口在空闲时为这些用户提供服务,忙时...
java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号 java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号
基于红帽Linux的银行排队叫号系统.pdf
使用C++,利用数据结构相关知识模拟了银行叫号系统,客户和操作窗口分为三种类型,普通,VIP,对公
系统名称:模拟银行排队叫号系统 硬件平台:NE—STR750F 开发环境:IAR Embedded Workbench IDE 开发目标:模拟银行排队叫号系统,办理业务,取号、排队、等待被服务。