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

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

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

755319dea165c2d28c82dd2738431497.png

043171fc6b27228346a47d24ea3be084.png

编译运行:

0921a58f994c2a4eb2de8444e4e3fe09.png

...

af2cd881f6b88da94b6aceaeb55957d9.png

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

6c5305900b5673acb9aa6276f4c1ec1b.png

运行:

48945436246acbbbf970fff8596abc42.png

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

6fcf758b53cbc490e77b970bc024f70f.png

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

e2483a3e8439e7c4de6a8b07c4523976.png

这时再运行:

ca49526cc9b913d129152d183dc3cfc4.png

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

Runnable接口存在的必要性:

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

accbcc7a9d12a5d86af2311d0eb9b1ab.png

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

55d7a9c3fe59c8b50a72db0c8b9fea28.png

d0e304878a488c4b230423f6c500cdaf.png

这时编译运行:

dceb1251aed3b33489bc9ca17e2f2ef1.png

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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值