在多线程中,有一个经典的例子:售票
售票很常见,公园,车站,电影院,都有售票系统,通常这些售票的地方,都开放着不止一个售票窗口。这就涉及到了多线程的概念了。
接下来看看这个例子:
既然线程有两种方式,我们就分别看看这两种方式写出来的程序和运行之后的结果是咋样的?
先来看看继承Thread的方式:
线程类:
运行及其结果:
先别管怎么样,先来看看Runnable方式实现出来的是咋样的?
Runnable方式:
Runnable类:
运行及其结果:
现在先来看看两种方式得到的结果,总票数同样是5张,也同样是开两个线程去售票。
看第一种继承Thread类的方式,打印出来总共有10条数据,也就是说,两个线程分别售票,互不相关。一张票被售出了两次。
而第二种方式:打印出来总共有5条数据,两个线程同时售票,总共售出5张票,也就是说两个线程同时首同一个票池内的票。一张票只售一次。
结果看完了,很明显,第二种方式才是我们想要的,第一种明显不符合,一张票被售了两次,想想,如果一辆班车上的一个座位的一张票被卖了两次,上车的时候来了两个人,会咋样?很可怕。对吧。
所以,也就可以得到我们上一节里面说的,实现Runnable方式,可以实现数据的共享。也提高了代码的健壮性。
<偷偷的告诉你们,当你把Thread类中的票的总数定义为静态(static)的时候,也是可以实现的,嘿嘿>
线程篇: