Java怎么实现站点售票功能
导读:本文共3256.5字符,通常情况下阅读需要11分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 题目要求我们创建5个线程来模拟卖票,当然这其中就包含多线程存在也就是我们要解决的问题,重复卖票和超额卖票。即多个窗口卖出同一张票以及窗口卖出非正数编号的票。不过这个问题可以先放一下,我们先来创建基础的线程模型,并在主方法中创建五个线程让他们跑起来话不多说,上代码。publicclassTicket{ publicstaticvoidmain(Strin... ...
目录
(为您整理了一些要点),点击可以直达。题目要求我们创建5个线程来模拟卖票,当然这其中就包含多线程存在也就是我们要解决的问题,重复卖票和超额卖票。即多个窗口卖出同一张票以及窗口卖出非正数编号的票。
不过这个问题可以先放一下,我们先来创建基础的线程模型,并在主方法中创建五个线程让他们跑起来
话不多说,上代码。
完成了基础的多线程框架搭建后,我们来为每个线程执行过程中加入卖票的程序
首先要解决的一个问题是:票存在哪里?。毋庸置疑的是由于是多线程并发的售票,因此票这个变量一定是被多个线程所共享的,而不能是每个线程对象自己的属性。
一个可行的方案是在TicketSellet
类中定义静态的票计数,这样所有的线程访问票的时候访问的都是同一个票计数变量。
另一个可行方案是使用一个对象管理票,票计数是这个对象的成员,并且让每个TicketSeller
持有相同的对象。那么多个线程也同样共享票计数。
当然,可行的方案还有很多,现在我们先来实现第一种,在之后的改进中,我们还会用到第二种。
先来一个没有加锁的写法,看看他的问题
在前面我们还提出了另一种方案,就是使用一个对象管理票的售卖。这种方案就不展开啰嗦了,直接上代码:
Java怎么实现站点售票功能的详细内容,希望对您有所帮助,信息来源于网络。