Java多线程示例——模拟银行柜台处理业务

本文通过Java实现了一个模拟银行柜台处理业务的多线程示例,包括普通窗口、VIP窗口和快速窗口,每个窗口作为独立线程处理业务。业务分为普通、VIP和快速类型,并有相应的耗时属性。窗口线程会优先处理自身任务队列,若为空则尝试处理其他窗口的业务。主线程负责生成和分配业务。测试结果显示了多线程处理的效果。
摘要由CSDN通过智能技术生成

文章目录


#前言
前不久看到一个题目 模拟银行柜台处理业务觉得很有意思,模拟银行柜台处理业务,考察的多线程编程,以及多线程间通信。由于以前没有系统学习过Java,工作中也是根据实际需要,去选择Java的一个部分再次学习。所以多线程编程一直是自己的软肋。甚至分不清实现Runnable接口和继承Thread类的区别。顺便问一下有人知道实现多线程编程的第三种方式么?在处理这个问题之前,先看了一遍《疯狂Java讲义》(这本书用来Java编程入门足以)中关于多线程的章节,心中关于题目中实现线程间通信也有了几种不同的方案,这里根据实际需要选择最容易实现的一种。
#题目
(1) 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
(2)有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。
(3)异步随机生成各种类型的客户,生成各类型用户的概率比例为:VIP客户 :普通客户 :快速客户 = 1 :6 :3。
(4)客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,
快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。
(5)各类型客户在其对应窗口按顺序依次办理业务。
(6)当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,
而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
(7)随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
#分析

  1. 题目涉及到的两个对象:窗口,业务。
  2. 根据窗口处理的任务分为:普通窗口、VIP窗口、快速窗口。
  3. 根据业务类型分为:普通业务、VIP业务、快速业务。
  4. 不同的窗口分为独立的线程处理不同的业务。
  5. 设定一个线程模拟生成业务。
  6. 业务对象有以下属性:
    a. 编号——取号操作
    b. 耗时 ——这里在生成业务时候生成
    c. 业务生成时间
    d. 业务开始处理时间
    e. 业务结束处理时间
    f. 业务被处理的窗口

#实现
##UML图

UML图

  1. Bank类实现TaskCompeleteLitener接口,Windows窗口类引用TaskCompeleteLitener实例,每处理完一个业务之后回调onTaskCompelete方法。
  2. QuickWindowVIPWindowNormalWindow表示处理不同类型业务的窗口均继承Window类。
  3. TaskFactory负责按照比例生成不同的业务。
  4. QuickTaskVIPTaskNormalTask表示不同类型的业务,均继承Task类。
  5. Window继承Thead类,不同的窗口作为独立的线程去运行。每个Window有属于自己的任
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值