本帖最后由 nine789 于 2015-6-25 20:46 编辑
多线程售票程序问题:和其他问题
问题一:怎么用循环创建不同名的多个对象?(不用循环也可以) 创建的对象需要有名字,不需要手动去写1000个对象,用程序创建。
例如: Sing s = new Sing(); Sing s2 = new Sing();
.........
Sing s999 = new Sing();
问题二:在非静态情况下,同步方法和同步代码块能否同时使用? 如果不能,为什么?
***********************************************************
下面是多线程售票问题
解释说明:程序模拟 北京火车站 的流程
在北京有多个火车站,其中每个火车站都有售票窗口和退票窗口
火车票是有最大数量的,也就是说从北京出发火车票,最多有200张(假如最多有200张),然后有些窗口可以退票的,退回来的票,可以继续被售出。
问题:在多线程售票的过程中,用同步代码块和同步方法以此交替执行,会出现问题,原因是 没有是没有用static 修饰火车票的数量。
因为火车票是不固定的,有退票的,也有买票的,所以不能用静态修饰,既然没有用静态修饰,那么售票窗口也是不可以用静态修饰的。这就是问题一的出现。
问题二的出现是因为我想new一个 World,在我创造的世界里有很多个地区,每个地区有很多个可以火车站,所以我想创建很多个火车站,所以需要new非常多的火车站对象,(既然是程序员,那就不能手动打出来几百行相同的代码),所以问题二就出现了。
问题三:下面的代码,我执行后 代码(火车站类)运行后会出现蓝屏,电脑配置i3 的,10G内存,运行后,20秒就会出现蓝屏。
还有就是我使用 集合存储火车票,但是知道火车站一开始就有一定数量的车票,所以就在退票窗口 用了一个构造函数来初始化火车票的数量,但是测试运行时蓝屏。
目前代码只写到了这里,浪费了我一天的时间,如果有哪位大神有兴趣的话,可以帮个忙,帮我补完程序代码,顺便先写清楚自己的思路,非常感谢。
有什么新问题的话或者有任何新的进展,我会在下面补充此帖子的最后面,用红色标出来,然后修改此贴的!
***********************问题1、既然在售票类的run方法中定义了车票的数量,为什么一开始运行的时候,有时会会出现空指针异常?
在没有退票的情况下,票被出售完以后,if判断的是 TICKETSS.size()>0 的时候才去执行售票的,为什么在卖完的时候,还会继续打印出来 没票的情况?而且有时候还会卖出同样的票?
在加锁的情况下,没有票的时候,是不去执行售票代码的,为什么 还会出售空票?(难道是无座的站票?----而且这个无座的站票,还是卖不完的那种!不会停止,)
有时候还会出现 死锁的情况,或者是我电脑卡了,
北京站:售票:窗口3:5-----同步代码块
北京站:售票:窗口3:4-----同步代码块
北京站:售票:窗口2:5-----同步代码块
北京站:售票:窗口1:2-----同步代码块
北京站:售票:窗口1:null-----同步代码块
北京东站:售票:窗口4:null-----同步代码块
空票错误已解决,看下面帖子地址
今天补全的 火车站类 ,和新出现的问题帖子地址:
http://bbs.itheima.com/thread-207441-1-1.html
**********************
此类为火车站类:
演示类:
- package review;
- import review.Depot;
- public class ThreadTicketDemo {
- public static void main(String[] args) {
- Depot dt = new Depot();
- Thread x1 = new Thread(dt);
- Thread x2 = new Thread(dt);
- Thread x3 = new Thread(dt);
- Thread x4 = new Thread(dt);
- x1.setName("北京站:");
- x2.setName("北京西站:");
- x3.setName("北京南站:");
- x4.setName("北京东站:");
- x1.start();
- x2.start();
- x3.start();
- x4.start();
- }
- }
复制代码
|
|