Java_线程—经典的例子:售票

在多线程中,有一个经典的例子:售票

售票很常见,公园,车站,电影院,都有售票系统,通常这些售票的地方,都开放着不止一个售票窗口。这就涉及到了多线程的概念了。

接下来看看这个例子:

既然线程有两种方式,我们就分别看看这两种方式写出来的程序和运行之后的结果是咋样的?

先来看看继承Thread的方式:

线程类:


运行及其结果:



先别管怎么样,先来看看Runnable方式实现出来的是咋样的?

Runnable方式:

Runnable类:


运行及其结果:



现在先来看看两种方式得到的结果,总票数同样是5张,也同样是开两个线程去售票。

看第一种继承Thread类的方式,打印出来总共有10条数据,也就是说,两个线程分别售票,互不相关。一张票被售出了两次。

而第二种方式:打印出来总共有5条数据,两个线程同时售票,总共售出5张票,也就是说两个线程同时首同一个票池内的票。一张票只售一次。

结果看完了,很明显,第二种方式才是我们想要的,第一种明显不符合,一张票被售了两次,想想,如果一辆班车上的一个座位的一张票被卖了两次,上车的时候来了两个人,会咋样?很可怕。对吧。

所以,也就可以得到我们上一节里面说的,实现Runnable方式,可以实现数据的共享。也提高了代码的健壮性。


<偷偷的告诉你们,当你把Thread类中的票的总数定义为静态(static)的时候,也是可以实现的,嘿嘿>


线程篇:

Java_线程-Thread

Java_线程—经典的例子:售票

Java_线程—经典的例子:生产者和消费者


java_多线程下载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值