# 采用多线程模拟排队叫号

关于排队叫号想必大家都了解:比如去银行,都会有取号机,银行窗口每办理完一个业务都会叫下一个排队的号去处理业务,一个人不会被多个窗口同时叫号,所以这里也涉及到了一个多线程共享数据的问题:我们先用代码简单模拟一下流程:

```java

/**

* @program: ThreadDemo

* @description: 模拟柜台

* @author: hs96.cn@Gmail.com

* @create: 2020-08-27

*/

public class Bank {

public static void main(String[] args) {

TicketWindowOneThread ticketWindowOneThread = new TicketWindowOneThread("一号柜台");

ticketWindowOneThread.start();

}

}

```

```java

/**

* @program: ThreadDemo

* @description: 模拟银行窗口处理业务

* @author: hs96.cn@Gmail.com

* @create: 2020-08-27

*/

public class TicketWindowOneThread extends Thread{

private final String name;

private static final int MAX = 50;

private int index = 1;

public TicketWindowOneThread(String name) {

this.name = name;

}

@Override

public void run() {

// 当当前号码数小于最大号码时,进行售票操作

while (index <= MAX) {

System.out.println("柜台:" + name + ",当前的号码是:" + (index++));

}

}

}

```

运行效果如下:

![](https://img.kancloud.cn/01/58/0158128f121ec4c5f2be4b7fb6231ff0_1040x224.gif)

这个输出毫无疑问,目前是单线程动作,接下来模拟三个窗口来模拟下真实的银行处理过程:

```java

/**

* @program: ThreadDemo

* @description: 模拟柜台叫号

* @author: hs96.cn@Gmail.com

* @create: 2020-08-27

*/

public class Bank {

public static void main(String[] args) {

TicketWindowOneThread ticketWindowOneThread1 = new TicketWindowOneThread("一号柜台");

ticketWindowOneThread1.start();

TicketWindowOneThread ticketWindowOneThread2 = new TicketWindowOneThread("二号柜台");

ticketWindowOneThread2.start();

TicketWindowOneThread ticketWindowOneThread3 = new TicketWindowOneThread("三号柜台");

ticketWindowOneThread3.start();

}

}

```

运行结果如下:

![](https://img.kancloud.cn/98/96/9896e56d42257e8e8946b69dc7575165_541x282.png)

这时候每个柜台都按照自己的号来叫,也就是窗口的index没有在线程之间同步,那么如何解决呢?

其实也很简单:只要用static修饰一下就好了:

![](https://img.kancloud.cn/a2/9f/a29f9bf13a988cec6730d45927f8795c_744x452.png)

运行效果如下:

![](https://img.kancloud.cn/89/c8/89c8960e6d9c168134e47b795077f1bf_1153x382.gif)

可以看到三个线程已经实现共享`TicketWindowOneThread`的`index`了。但是可以看到输出的顺序颠倒了,这个我们后续再优化,先理解这个线程共享资源的概念即可。

java 多线程 银行排队_3.采用多线程模拟银行排队叫号相关推荐

  1. java模拟银行存取_JAVA基础案例 模拟银行存取款业务

    模拟银行存取款业务 编写一个Java应用程序,模拟网上银行登录及存取款业务.登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当前登录的账户名,并进入下一步选择操作类型.操作 ...

  2. 多线程三种同步方式(模拟银行取款)

    方法一:同步代码块 Accoun package com.bjsxt.synch1;/*** 银行账户类*/ public class Account {private int balance = 6 ...

  3. java模拟银行账户业务转账_模拟银行账户汇款操作(并发控制)

    import java.util.Arrays; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Tim ...

  4. c语言模拟银行ATM的程序,简单模拟银行ATM取款系统 | C/C++程序员之家

    学习C#,第一次C#实验课,模拟ATM取款系统,锻炼基本的C#语法以及选择控制语句! 实现功能: 1.取款 2.余额查询 3.修改密码 4.退出 [cpp] using System; using S ...

  5. Python基础项目实践之:面向对象方法实现模拟银行管理系统

    Python课堂基础实践系列: Python基础项目实践之:学生信息管理系统 python基础项目实践之: 学生通讯录管理系统 Python基础项目实践之:面向对象方法模拟简单计算器 Python基础 ...

  6. Java 多线程 模拟银行ATM实时存取钱

    近期想回顾一些知识: 一.Java 多线程 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务.多线程是多任务的一种特别的形式,但多线程使用了更小的资源开 ...

  7. java银行排队系统_用GUI模拟银行排队系统

    要求: 和实际情况相似,您到银行办理业务,到了银行大厅首先是在电脑上刷卡(有的可能不用刷卡)取出一个纸条,上面有你的位置号还有你前面有多少人,在工作人员那里会有一个按钮,点击一下就会叫一个人到他那里办 ...

  8. java如何写线程外部类_廖雪峰Java读书笔记(六)--多线程(或称并发)

    1. 多线程基础 首先要明白一些概念: 进程:把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类似的,音乐播放器和Word都是进程. 线程:某些进程内部还需要同时执行多个子任务.例 ...

  9. Java的并发编程中的多线程问题到底是怎么回事儿?

    转载自   Java的并发编程中的多线程问题到底是怎么回事儿? 在我之前的一篇<再有人问你Java内存模型是什么,就把这篇文章发给他.>文章中,介绍了Java内存模型,通过这篇文章,大家应 ...

  10. Java第二十八天——杂七杂八的流 多线程

    Java第二十八天--杂七杂八的流 多线程 一.杂七杂八的流 1._序列化流和反序列化流的概述和使用(理解) A:序列化流的概述 ​ 所谓的序列化:就是把对象通过流的方式存储到文件中.注意:此对象 要 ...

最新文章

  1. C++格式化输入输出
  2. java中float和double型数据在赋值时有哪些注意事项?,java语言中float和double类型的数据在编程时的注意事项...
  3. 3.1.6 OS之分页存储(页号、页偏移量等)
  4. Qmail 邮件系统维护管理技术文档
  5. filters.revealTrans.Transition用法
  6. php 音频上传大小限制,WordPress最大上传文件大小限制修改 | Stay Curious
  7. Android TV开发总结(七)构建一个TV app中的剧集列表控件
  8. K-Lite Codec Pack 解码器下载及安装过程步骤参考
  9. ssh远程连接网络构建
  10. Java 编程语言单词汇总
  11. 天涯.只看楼主的bookmarklet
  12. 英语常用口语1000句
  13. MQTT-Eclipse paho mqtt源码分析-连接MQTT Broker
  14. 意大利或将立法 禁止中小学校园携带手机
  15. 使用 apifm 插件进行 Flutter 云开发——QQ一键登录/注册
  16. LeetCode Daily challenge - K Closest Points to Origin
  17. python画厢式图_用matplotlib画箱体图(boxplot)
  18. 手写tomcat socket closed_ipad pencil2019防误触电容笔苹果air3触屏控手写笔mini5绘画202010元优惠券券后价65元...
  19. Python 构成三角形
  20. 前端之HTML 表格

热门文章

  1. 如何在DOS系统下删除隐藏的文件
  2. windows强制删除文件
  3. smartprinter注册版_SmartPrinter下载 4.2 共享版
  4. 得一微YS9083XT量产工具及方法FW190402
  5. matlab与信道编码,基于MATLAB的信道编码.doc
  6. Cardhop for Mac(通讯录管理软件)
  7. 数字图像处理·SLIC超像素分割算法C++实现
  8. kindle DXG 安装多看
  9. 原来可视化还能这么美...
  10. C语言-快速排序实现