采用多线程模拟银行排队叫号:

关于银行拿排队号去叫号的过程我想不必过多解释了,就是有几个业务窗口,并行的处理业务,每处里完一个人,则会叫下一个排队的号去处理业务,一个人是不会被多个窗口工作人员叫号的,所以这里也涉及到了一个多线程共享数据的问题,下面用实际代码去简单模拟一下:

编译运行:

...

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

运行:

造成的原因也比较容易找出来:

怎么共享呢,最简单的就是用static修饰变量啦,如下:

这时再运行:

关于输出顺序颠倒的问题以后会探究,目前先关心咱们的需求就是每次叫号都是往上递增的,但是用static去共享数据是一个非常粗略的实现,未来也会不断学习用更好的方式去共享线程间的数据。

Runnable接口存在的必要性:

关于Runnable在JDK文档中也有说明,是使用线程的另外一种方式:

而对于上面咱们模拟银行的代码可以改用它再来体会下使用它的好处:

这时编译运行:

也能达到我们的目的,但是这种写法更加好,线程的逻辑全封装到一个实例中,所以这也是Runnable存在的必要性。

java线程基础巩固---采用多线程方式模拟银行排队叫号以及Runnable接口存在的必要性的更多相关文章

  1. java 网络编程基础 TCP/IP协议:服务端ServerSocket;客户端Socket; 采用多线程方式处理网络请求

    1.Java中客户端和服务器端通信的简单实例 Java中能接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一 ...

  2. Java实现线程的两种方式?Thread类实现了Runnable接口吗?

    Thread类实现了Runnable接口吗? 我们看看源码中对与Thread类的部分声明 public class Thread implements Runnable { /* Make sure ...

  3. Java 线程基础

    Java 线程基础

  4. Java线程基础及多线程的实现

    一.进程和线程 1.进程:正在运行的程序         是系统进行资源分配和调用的独立单位         每一个进程都有它自己的内存空间和系统资源 2.线程是进程中的单个顺序控制流,是一条执行路径 ...

  5. Java中两种实现多线程方式的对比分析

    本文转载自:http://www.linuxidc.com/Linux/2013-12/93690.htm#0-tsina-1-14812-397232819ff9a47a7b7e80a40613cf ...

  6. Java 线程基础知识

    前言 什么是线程?线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程 ID,当前指令指针 (PC),寄存器集合和堆栈组成.另外,线 ...

  7. java线程基础知识----线程基础知识

    不知道从什么时候开始,学习知识变成了一个短期记忆的过程,总是容易忘记自己当初学懂的知识(fuck!),不知道是自己没有经常使用还是当初理解的不够深入.今天准备再对java的线程进行一下系统的学习,希望 ...

  8. java线程实现的三种方式以及静态代理

    线程 一个进程中若开辟多个线程,线程的运行由调度器控制,先后顺序不能人为干预. 实现方式 继承 Thread类 调用run方法,只有主线程一条路 调用start方法,主线程和子线程并行交替执行 pub ...

  9. java 线程基础篇,看这一篇就够了。

    前言: Java三大基础框架:集合,线程,io基本是开发必用,面试必问的核心内容,今天我们讲讲线程. 想要把线程理解透彻,这需要具备很多方面的知识和经验,本篇主要是关于线程基础包括线程状态和常用方法. ...

随机推荐

  1. Awvs–网络漏洞扫描工具

    Awvs漏洞扫描自动化 在WEB安全方面,安全侧使用Acunetix_Web_Vulnerability_Scanner_11.xWEB漏洞扫描工具定期手工对m站和www站进行全站漏洞扫描. 为了防止 ...

  2. vue项目中event bus的简单使用

    之前做的一个vue后台管理系统中,需要实现这样一个功能:从列表页点击新建或编辑进入新建.编辑页面,新建.编辑完成后需要关闭当前的新建和编辑tab,而tab的关闭则是由项目中的tag组件控制的, 新建和 ...

  3. 要求设计 LazyMan 类,实现以下功能

    LazyMan('Tony'); // Hi I am Tony LazyMan('Tony').sleep(10).eat('lunch'); // Hi I am Tony // 等待了10秒.. ...

  4. navicat破解版的下载与激活

    原文链接:http://www.cnblogs.com/djwhome/p/9289295.html 以前一直使用的老版的破解版的navicat,但是最近老是报错 而且连接还特别慢,今天终于不忙了额, ...

  5. LOJ #10131 「一本通 4.4 例 2」暗的连锁

    LOJ #10131 「一本通 4.4 例 2」暗的连锁 给一棵 \(n\) 个点的树加上 \(m\) 条非树边 , 现在需要断开一条树边和一条非树边使得图不连通 , 求方案数 . $n \le 10 ...

  6. Nginx04---编译安装

    原文:https://www.cnblogs.com/zhang-shijie/p/5294162.html 一:基介绍 官网地址www.nginx.org,nginx是由1994年毕业于俄罗斯国立莫 ...

  7. java学习(东软睿道)2019-09-07(预课html基础)《随堂笔记》

    1. 文件名称.html 2. 后缀表示文件类型.txt .doc .ppt 3. 标签<html> <head> <body> 显示内容 <font siz ...

  8. JSP和Servlet异常处理转发

    <error-page> <!-- 指明异常类型. --> <exception-type>java.lang.ArrayIndexOutOfBoundsExcep ...

  9. Netty源码剖析-业务处理

    参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线:worker thread 触发pipeline.fi ...

  10. MyBatis学习存档(4)——进行CRUD操作

    使用MyBatis进行数据库的CRUD操作有2种方式:一种如之前所说的接口+xml,而另一种是通过对接口上的方法加注解(@Select @Insert @Delete @Update) 但是通常情况下 ...