黑马程序员技术交流社区

标题: 分享一下笔试题 [打印本页]

作者: Jayshun    时间: 2014-11-11 17:31
标题: 分享一下笔试题
package com.itheima;
/*5、 编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、
售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,
利用你所学的线程知识来模拟此售票过程。
*/
public class Test5 {
        public static void main(String[]args){
                Ticket tt=new Ticket();
                TicketSealCenter tc=new TicketSealCenter(tt);
                SealWindow w1=new SealWindow(tt);
                SealWindow w2=new SealWindow(tt);
                SealWindow w3=new SealWindow(tt);
                SealWindow w4=new SealWindow(tt);
                new Thread(tc).start();
                new Thread(w1).start();
                new Thread(w2).start();
                new Thread(w3).start();
                new Thread(w4).start();
        }
}
//创建票的类,每张给一个ID
class Piao{
        int id;
        Piao(int id) {
                this.id = id;
        }
        public String toString() {
                return "piao: " + id;
        }
}
class Ticket{//创建售票信息
        int index=0;
        Piao[] arrp=new Piao[100];
        public synchronized void set(Piao p){//提供给票的方法,用锁解决线程安全问题
                while(index==arrp.length){
                        try {
                                this.wait();
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
                this.notify();
                arrp[index]=p;
                index++;
               
        }
        public synchronized Piao get(){//对外提供取票的方法,解决线程同步问题
                while(index==0){
                        try {
                                this.wait();
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        System.out.println("票已售欣,请稍后在试。。。。");
                }
                this.notifyAll();
                index--;
                return arrp[index];
        }
}
class SealWindow implements Runnable{//售票窗口调用取票的方法
        Ticket tc=null;
        SealWindow(Ticket tc){
                this.tc=tc;
        }
        public void run() {
                for(int i=0;i<20;i++ ){
                        Piao p=tc.get();
                System.out.println("窗口剩余票:"+p);
                try {
                        Thread.sleep(10000);
                } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                }
                }
}
class TicketSealCenter implements Runnable{//售票中心发布一定数量的票
        Ticket tc=null;
        TicketSealCenter(Ticket tc){
                this.tc=tc;
        }
        public void run() {
                for(int i=0;i<100;i++){
                        Piao p=new Piao(i);
                        tc.set(p);
                        System.out.println("售票中心已发布票:"+p);
                        try {
                                Thread.sleep(1000);
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
               
        }
}
       






作者: w239983684    时间: 2014-11-11 20:52
貌似老师讲多线程时就拿这个举例的。
作者: 韶山    时间: 2014-11-11 21:03
感谢分享学习了。
作者: qq8921310    时间: 2014-11-11 21:54
需要这么麻烦么?

作者: Jayshun    时间: 2014-11-12 18:22
我只会这个写法啊
作者: 范中俊    时间: 2014-11-12 22:17
学习了 :),
作者: 时间都去哪了    时间: 2014-11-12 22:54
学习了,先收藏
作者: 聪明叉    时间: 2014-11-12 23:36
学习了~~~
作者: 卷毛拉风    时间: 2014-11-13 10:13
谢谢分享哦哦哦
作者: 王世虎    时间: 2014-11-13 11:44
我觉得是票务中心分配票,售票窗口卖票。多线程操作同一资源,动作不同。线程间通信
作者: 爱如kongcheng    时间: 2015-5-8 22:47
Jayshun 发表于 2014-11-12 18:22
我只会这个写法啊

这个是面试时候的笔试题目吗?
作者: 直护这夜    时间: 2015-5-12 22:18
谢谢分享,已经记录了
作者: 王连正    时间: 2015-8-3 17:01
这个是我的面试题,好坑啊
作者: 15536889258    时间: 2015-11-6 11:50
路过,看看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2