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 + "]";
}
}
分享到:
相关推荐
使用GUI实现银行排队叫号系统 模拟实现银行业务调度系统逻辑,具体需求如下: • 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 • 有三种对应类型的客户:VIP客户,...
2. **事件驱动编程**:银行叫号系统的另一个关键点是事件驱动编程。当客户取号或服务窗口状态变化时,系统需要响应这些事件并执行相应的操作。这通常涉及到事件监听器和回调函数,使得程序在特定事件发生时能自动...
队列管理是银行叫号系统的关键部分,涉及到多个方面: 1. 多队列管理:根据不同的业务需求(如存款、取款、咨询等),可以设立多个队列,确保相同业务类型的客户能快速得到服务。 2. 动态调度:系统能够根据当前...
【银行叫号系统】是一种广泛应用于金融机构和医疗机构的客户服务流程管理系统,它有效地组织了客户等待服务的秩序,提高了服务效率,降低了客户的等待焦虑。在本课程设计中,我们将重点模仿这种系统,并融入多线程...
通过模拟银行叫号服务,我们可以深入学习线程同步、并发数据结构和随机延迟等概念。这样的练习不仅能提高编程能力,还能帮助我们更好地理解和解决现实生活中的并发问题。希望这个教程对你有所帮助,如果你有任何疑问...
在“java多线程模拟队列实现排队叫号”这一主题中,我们将深入探讨如何利用这两种技术来模拟现实生活中常见的排队叫号系统。 首先,多线程是指一个程序中可以同时执行多个独立的执行流,每个执行流被称为一个线程。...
【基于SSM的银行排队叫号系统】是一个典型的Java Web应用程序,它采用了Spring、Spring MVC和MyBatis(简称SSM)三大主流框架进行开发。这个项目旨在模拟银行的排队服务,通过微信小程序作为用户界面,提供高效、...
这是一个基于SSM(Spring、SpringMVC、MyBatis)框架的Java毕业设计项目,名为“银行排队叫号系统”。这个系统旨在模拟实际银行环境中的排队服务流程,为用户提供便捷的叫号体验。以下是该项目的一些关键知识点和...
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
此外,银行叫号系统可能还涉及到以下知识点: - **队列数据结构**:用于存储待叫号的客户,常见的有阻塞队列(`BlockingQueue`),在多线程环境下能提供线程安全的插入和移除操作。 - **信号量(Semaphore)**:控制...
《基于JSP+SSM的银行排队叫号系统毕业设计》是一个典型的Web应用程序,它采用Java作为主要开发语言,结合Spring、SpringMVC和MyBatis(SSM)三大框架构建了一个B/S架构的系统。这个系统旨在模拟银行的排队叫号流程,...