知识点:
1、1.5以上的线程池
2、阻塞队列
实现:
1、排号器(队伍)
import java.util.concurrent.ArrayBlockingQueue; /** * 排队器 * * @author luoqinglong * @date 2014-3-23 */ public class BuyQueue extends ArrayBlockingQueue<String> { /** * @param capacity */ public BuyQueue(int capacity) { super(capacity); // TODO Auto-generated constructor stub } }
2、控制类
import java.util.HashMap; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.Future; /** * 会员控制器 * * @author luoqinglong * @date 2014-3-23 */ public class MemberAction { /** * 提交订单 */ public void saveOrder(final String memberId) { // TODO INSERT DB try { // 排队 Test.getBuyQueue().put(memberId); } catch (InterruptedException e) { e.printStackTrace(); } // 增加排队人携带的任务 Future<Map<String, Object>> map = Test.getExecutorService().submit(new Callable<Map<String, Object>>() { @Override public Map<String, Object> call() throws Exception { Map<String, Object> map = new HashMap<String, Object>(); OrderService orderService = new OrderService(); orderService.dealOrder(); return map; } }); } }
3、业务类
public class OrderService { /** * 按照会员下单的顺序处理订单 */ public synchronized void dealOrder() { String memberId = Test.getBuyQueue().poll(); System.out.println("开始处理订单,会员号: " + memberId); try { // 模拟业务处理时长 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("---处理完成订单,会员号: " + memberId); if (Test.getBuyQueue().size() == 0) { Test.getExecutorService().shutdown(); } } }
4、测试类
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author luoqinglong * @date 2014-3-23 */ public class Test { private static ExecutorService executor = null; private static BuyQueue buyQueue = null; /** * @param args */ public static void main(String[] args) { for (int i = 0; i < 100; i++) { MemberAction action = new MemberAction(); action.saveOrder(i + 1 + ""); } } public static synchronized ExecutorService getExecutorService() { if (Test.executor == null) { Test.executor = Executors.newFixedThreadPool(3); } return Test.executor; } public static synchronized BuyQueue getBuyQueue() { if (Test.buyQueue == null) { Test.buyQueue = new BuyQueue(10); } return Test.buyQueue; } }
需完善的地方:
1、防止重复排队
2、针对不同的业务使用多个排队器
相关推荐
这些设备通常拥有有限的计算能力和存储空间,但能够提供简单的Web服务,方便用户通过网络对其进行访问和控制。 #### 三、研究方法与实施步骤 ##### 1. 嵌入式Web系统架构分析 - **开发平台**:本研究选择基于ARM7...
本示例将深入讲解如何使用Python的socket库来实现一个最简单的Web服务器。这个服务器能够响应HTTP请求,并返回固定的内容,对于初学者理解Web服务器的工作原理非常有帮助。 首先,我们需要了解Web服务器的基本工作...
M/M/1是排队论中最简单且基础的模型之一,表示单一服务员(或服务器)的系统。它涉及时间依赖行为、极限行为、平均性能度量、逗留时间与等待时间分布、优先级策略(包括抢占式和非抢占式),以及忙碌期的分析。M/M/1...
例如,在Web服务器中,可以通过智能的排队策略来平衡请求处理,防止过载;在网络传输中,TCP/IP协议栈就使用了类似的思想来控制数据包的发送速率,避免拥塞。 总的来说,"wtem.rar_排队"提供的内容可能是针对这些...
当时给客户写都一个简单都预约排队系统,后台管理员输入排队号,人数,当前叫号, 运行环境 jdk8+mysql+IntelliJ IDEA+maven+mybatis 项目技术(必填) springboot+mysql+mybatis+bootstrap+jquery ...
【描述】"简单集成的效果示例"暗示了在JBPM4的web设计器中,通过命令模式实现的功能集成能够直观地展示出其优势。这可能包括了简化流程编辑、保存和撤销操作,以及与其他系统(如数据库或工作流引擎)的无缝连接。博...
请求排队系统1.1是一个基于Java Web开发的简易应用程序,主要功能是管理并有序处理用户的请求。这个系统采用了一个基本的队列数据结构,确保所有请求按照先进先出(FIFO)的原则进行处理,避免了资源的竞争和无序...
诞生于1995年,由Rasmus Lerdorf创建,PHP最初用于简单的网页动态处理,如今已发展成为一款功能齐全、生态丰富的全栈开发工具,支持从网站前端交互到后端业务逻辑、数据库操作乃至API接口开发的全方位需求。...
现在在学校里,预订教室需要填申请表,还要按时去报到排队确认,这些手续过于繁琐,所以我们想开发一个教室预订系统来简化预订教室的繁琐流程。在这篇报告中,介绍了我们开发的这个友好的教室预订系统,我们的系统的...
"同城跑腿配送系统uniapp+web端"就是这样一个解决方案,旨在为用户提供便捷、高效的同城配送服务,包括帮取、帮送、帮买、帮排队、帮办事等一系列个性化服务。 一、uniapp框架详解 uniapp是一款基于Vue.js开发的多...
Taskqueue 是一种简单的排队服务,用于在联网机器之间划分工作。 Taskqueue 的概念在 RabbitMQ 的教程中得到了完美的解释: 工作队列(又名:任务队列)背后的主要思想是避免立即执行资源密集型任务而不得不等待它...
LODOP技术主要基于JavaScript,允许开发者通过简单的脚本语言实现复杂的打印功能,提高了Web应用的用户体验。 在描述中提到的"采用6.0",这可能指的是LODOP控件的一个特定版本,通常每个新版本都会带来性能优化、新...
在本文中,我们将深入探讨如何使用C#中的队列数据结构(Queue)来解决简单的并发问题。队列是一种线性数据结构,遵循先进先出(FIFO)的原则,即第一个进入的元素也将是第一个离开的元素。这种特性使得队列在处理...
1. **Python编程**:Python是一种高级编程语言,以其简洁明了的语法和丰富的库支持而被广泛应用于各种项目,包括Web开发、科学计算、自动化任务和数据分析。在这个项目中,Python被用来构建整个排队叫号服务系统,...
在这个服务器中,每个用户的连接在请求完成后会被断开,新的请求需要重新排队,这种方式有助于防止大页面占用过多网络资源。 在数据库方面,项目选择了微软的ACCESS数据库,适用于小型社区服务器。如果在LINUX平台...
3. **Spring MVC**:Spring MVC是Spring框架的一部分,它是一个基于模型-视图-控制器(MVC)架构的Web应用框架,用于处理HTTP请求并返回相应的视图。 4. **MyBatis**:MyBatis是一个轻量级的持久层框架,它允许...
本教程将引导新手理解如何利用AOP来记录Web请求日志。下面将详细阐述这个过程。 首先,我们需要了解AOP的基本概念。AOP允许我们在程序执行过程中,在特定的“连接点”(例如方法调用)上插入自定义的行为,这些行为...
总之,Actix-web 的单线程模式提供了一种简单而有效的启动方式,适合轻量级应用或初始开发。然而,对于高并发场景,推荐使用多线程或多工作进程模式,以充分发挥 Rust 异步编程的优势和硬件资源。通过深入理解和熟练...
《基于JSP+SSM的银行排队叫号系统毕业设计》是一个典型的Web应用程序,它采用Java作为主要开发语言,结合Spring、SpringMVC和MyBatis(SSM)三大框架构建了一个B/S架构的系统。这个系统旨在模拟银行的排队叫号流程,...