关于队列,使用的地方很的多。

现实中有许多的样例。

比方医院的挂号系统,银行里的叫号系统,食堂里的排队打饭等等。市场上又这种排队取号的设备。他们的功能基本例如以下:

1、系统可联网联机统一发号。
2、系统可无线对接,也可有线连接;
3、系统支持100种业务以上;
4、系统支持多个等候区提示等候信息,各等候区语音及显示可独立。
5、个性化语音可呼叫客户所办理的业务名称(医院版可呼叫病人姓名)等信息。
6、号码可在不同服务类别的柜台窗体之间相互转移,顾客不必反复排队;
7、具备登录操作功能和退出操作功能:工作開始前,输入员工登陆号进行登录。工作结束后,退出排队系统,这对统计很准确。
8、发号机界面的图片客户全然能够按个性化自主设计更换。
9、各项业务的按键客户全然能够按个性化自主设计更换;
10、支持通过读卡器读取客户相关信息后,自己主动区分VIP客户和普通客户,自己主动区分对公客户和对私客户,并按营业机构自定的排队规则自己主动编组排队;
11、号票上和发号机上的显示屏会显示每一个顾客前面的等待人数;
12、各项业务队列客户全然能够自主按需随意增减。
13、各项业务的等待人数客户全然能够自主设定在界面上显示并可随意排版。
14、各项业务的工作时段及暂停时段客户全然能够自主设定。
15、操作员工的增减及登陆账号客户全然能够自主更改;
16、语音呼叫的信息客户全然能够自主按个性化更改;
17、显示屏的不论什么显示信息客户全然能够自主按个性化更改;
18、顾客办理各项业务的序号客户全然能够自主设置,如:贵宾业务或理財金业务可设为1-200号内、外币业务可设为201-500号内、人民币业务设501-9999号内;
19、工作员工所办理的业务队列客户全然能够自主随意设置优先级。
20、号票上的文字内容、图案、业务名称、时间格式、更改字体及大小、纸张长短等客户全然能够自主按个性化设置;
21、系统支持播放背景音乐。音乐曲目全然由客户自主选择;
22、系统支持在值班经理处增设监控软件,处理各种特殊状况;
23、系统支持高清晰度等离子显示器、大屏幕、电视墙等多种显示设备。显示丰富的排队信息。
24、系统支持连接互联网络,可实现远程监控;
25、系统设有扩展功能,当须要有关统计和管理数据时。可热键激活管理软件并打印;
26、系统可依据须要配置客户评价器及排队信息(短信)提示功能。

OK,了解了这些后,我们来实现一个简单的样例吧。先看看效果图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveG10YmxvZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

废话不多说了。看代码:

CallNum.java

package com.test;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* @see 模拟银行叫号系统
* @author Herman.Xiong
* @date 2014年11月17日 14:48:48
* @version V1.0
*/
public class CallNum {
public static void main(String[] args) throws InterruptedException {
//创建服务中心,如一个银行的营业厅
Center center = new Center();
ExecutorService exec = Executors.newCachedThreadPool();
//模拟产生服务人员
Producer producer = new Producer(center);
//模拟产生N多客户
Consumer consumer = new Consumer(center);
exec.execute(producer);
//模拟10名客户
for (int i = 0; i < 10; i++) {
exec.execute(consumer);
}
TimeUnit.SECONDS.sleep(10);
exec.shutdown();
//如有疑问,请加QQ群:135430763共同学习!
}
}

Center.java

package com.test;

import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
/**
* @see 服务中心
* @author Herman.Xiong
* @date 2014年11月17日 14:41:28
* @version V1.0
*/
public class Center extends Thread {
private final static int MAXCOUNT = 10; private BlockingQueue<Waiter> waiters;
private BlockingQueue<Customer> customers; private Random rand = new Random(47); private final static int PRODUCERSLEEPSEED = 100;
private final static int CONSUMERSLEEPSEED = 10000; public Center() {
//创建10名提供服务的工作人员
this.waiters = new LinkedBlockingQueue<Waiter>(MAXCOUNT);
for (int i = 0; i < MAXCOUNT; i++) {
waiters.add(new Waiter());
}
//10名工作人员工作就绪,创建客户队列
this.customers = new LinkedBlockingQueue<Customer>();
} public void produce() {
try {
TimeUnit.MILLISECONDS.sleep(rand.nextInt(PRODUCERSLEEPSEED));
} catch (InterruptedException e) {
e.printStackTrace();
}
this.customers.add(new Customer());
} public void consume() {
try { // 服务窗体可用
Waiter waiter = this.waiters.take();
this.waiters.remove(waiter); // 客户可用
Customer customer = this.customers.take();
this.customers.remove(customer); // 窗体显示
System.out.println(waiter + "正在为" + customer + "服务...");
TimeUnit.MILLISECONDS.sleep(rand.nextInt(CONSUMERSLEEPSEED)); this.waiters.add(waiter);
} catch (InterruptedException e) {
System.err.println("---" + e.getMessage());
}
}
}

Producer.java

package com.test;
/**
* @see 生产者线程,模拟银行工作人员服务完毕一位客户后開始准备服务下一位客户
* @author Herman.Xiong
* @date 2014年11月17日 14:55:43
* @version V1.0
*/
public class Producer implements Runnable {
private Center center; public Producer(Center center) {
this.center = center;
} @Override
public void run() {
while (!Thread.interrupted()) {
//产生客户
center.produce();
}
}
}

Consumer.java

package com.test;
/**
* @see 模拟客户完毕业务需求后,服务人员空暇就绪
* @author Herman.Xiong
* @date 2014年11月17日 14:57:11
* @version V1.0
*/
public class Consumer implements Runnable {
private Center center; public Consumer(Center center) {
this.center = center;
} @Override
public void run() {
while (!Thread.interrupted()) {
center.consume();
}
} }

点击源码下载:http://download.csdn.net/download/xmt1139057136/8167619

关于大家关注我的博客!如有疑问,请加QQ群:135430763共同学习!

叫号系统排队系统挂号系统实现(JAVA队列)的更多相关文章

  1. 基于Spring MVC + Spring + MyBatis的【医院就诊挂号系统】

    资源下载:https://download.csdn.net/download/weixin_44893902/21727306 一.语言和环境 1.实现语言: JAVA语言. 2.环境要求: MyE ...

  2. linux系统(rpm与deb环境),JAVA JDK的配置

    步骤一:(配置 JAVA JDK  DEB系列linux系统) 1,下载JAVA JDK 1.1.官网下载java JDK (最好为1.7及以上版本) 下载地址http://www.oracle.co ...

  3. Java生鲜电商平台-生鲜系统中商品订单系统售后系统设计

    Java生鲜电商平台-生鲜系统中商品订单系统售后系统设计(服务订单履约系统) 说明: 电商之下,我们几乎能从电商平台上买到任何我们日常需要的商品,但是对于很多商品来说,用户购买发货后,只是整个交易流程 ...

  4. Java生鲜电商平台-商家支付系统与对账系统架构实战

    Java生鲜电商平台-商家支付系统与对账系统架构实战 说明:关于生鲜电商平台,支付系统是连接消费者.商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付 ...

  5. [SQL Server优化]善用系统监视器,确定系统瓶颈

    原文:[SQL Server优化]善用系统监视器,确定系统瓶颈 来自: http://hi.baidu.com/solorez/blog/item/f82038fa0e71b78d9e51468c.h ...

  6. linux系统top命令查看系统状态

    Linux系统可以通过top命令查看系统的CPU.内存.运行时间.交换分区.执行的线程等信息.通过top命令可以有效的发现系统的缺陷出在哪里.是内存不够.CPU处理能力不够.IO读写过高. 使用SSH ...

  7. 浩瀚技术团队... 安卓智能POS移动PDA开单器 开单器 进销存系统 进销存系统

    浩瀚技术团队... 智能POS移动PDA开单器 开单器 进销存系统 进销存系统 点餐 会员管理 会员管理 深度解读 手机APP移动办公到底是什么? 快速打单POS·不仅仅是快那么简单!  

  8. Windows 10系统更换Windows 7系统磁盘分区注意事项二

    1.在原WIN10系统中将硬盘的GPT分区表格式转换为MBR分区表格式 上一篇关于新机预装WIN10系统更换为WIN7系统中说到需要将硬盘的GPT分区表格式转换为MBR分区表格式,在文章末尾给出的链接 ...

  9. Windows 10系统更换Windows 7系统磁盘分区注意事项一

    新买的电脑预装系统是WIN10,考虑到兼容性问题,打算更换为WIN7,但在新机上不能直接装WIN7系统,需要在BIOS启动中做一点小改动. 原因分析:由于Windows 8采用的是UEFI引导和GPT ...

随机推荐

  1. HDU 2045不easy系列之三LELE的RPG难题(趋向于DP的递推)

    不easy系列之(3)-- LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...

  2. [Tailwind] Control What Variations are Generated for Each Utility Class Module in Tailwind

    In this lesson, we learn how to control what utility classes are generated for each utility class mo ...

  3. CentOS 6 安装最新的 Redis 2.8 ,安装 TCMalloc

    1,遇到的问题就是 redis 2.8 版本号依赖 Google 的 TCMalloc TCMalloc(Thread-Caching Malloc)是google开发的开源工具──"goo ...

  4. 王立平--TF卡

    最终知道TF卡是什么了... TF卡又称microSD,是一种极细小的快闪存储器卡,由SanDisk(闪迪)公司发明创立. 这样的卡主要于手机使用.但因它拥有体积极小的长处,随着不断提升的容量. 它慢 ...

  5. 剑指offer面试题14(Java版):调整数组顺序使奇数位于偶数的前面

    题目:输入一个整数数组.实现一个函数来调整该数组中数字的顺序.使得全部奇数位于数组的前半部分.全部偶数位于数组的后半部分. 1.基本实现: 假设不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每 ...

  6. 网易NAPM Andorid SDK实现原理--转

    原文地址:https://neyoufan.github.io/2017/03/10/android/NAPM%20Android%20SDK/ NAPM 是网易的应用性能管理平台,采用非侵入的方式获 ...

  7. java实现sql批量插入参数

    背景: 需要更新一些不规范的时间格式,如将某个时间格式化为yy-MM-dd,实际上为 yy-MM-dd hh:mm:ss,并且需要提供回滚脚本. 例如:规范化时间的脚本如下: ,) WHERE tes ...

  8. .NET中的异步操作及线程同步

    执行异步操作 CLR使用了WIN的线程处理能力,但保留了与其分离的权利.某些时候CLR的线程与Win的线程不是完全的匹配. 线程的系统开销较大,应限制其数量. 创建:分配并初始化一线程内核对象,保留1 ...

  9. Win10 build package error collections

    1. 打包Released的时候出现问题意思是说 本地项目,类里有这个Visibility属性不能进行序列化 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 error CS0029: 无法将 ...

  10. 自定义一个简单的web框架

    from wsgiref.simple_server import make_server def book(request):     #视图函数 return [b'<h1> book ...