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

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

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

编译运行:

...

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

运行:

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

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

这时再运行:

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

Runnable接口存在的必要性:

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

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

这时编译运行:

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

原文地址:https://www.cnblogs.com/webor2006/p/7709647.html