A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sixth 中级黑马   /  2012-11-9 14:36  /  1582 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;

public class Test {

        public static void main(String[] args) {
               
                //售票中心不断产生新票
                Executors.newSingleThreadExecutor().execute(new Runnable(){
                        public void run(){
                                TicketSealCenter stc = TicketSealCenter.getInctance() ;
                                while(true){
                                        stc.newTicket() ;
                                }
                        }
                }) ;
                //售票窗口 1 开始售票
                Executors.newSingleThreadExecutor().execute(new Runnable(){
                        SealWindow s1 = new SealWindow() ;                       
                        public void run(){
                                s1.setType(1) ;
                                while(true){
                                        s1.seal() ;
                                        try {
                                                Thread.sleep(1000) ;
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                }
                               
                        }
                }) ;
                //售票窗口 2 开始售票
                Executors.newSingleThreadExecutor().execute(new Runnable(){
                        SealWindow s2 = new SealWindow() ;                       
                        public void run(){
                                s2.setType(2) ;
                                while(true){
                                        s2.seal() ;
                                        try {
                                                Thread.sleep(1000) ;
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                }
                        }
                }) ;
                //售票窗口 3 开始售票
                Executors.newSingleThreadExecutor().execute(new Runnable(){
                        SealWindow s3 = new SealWindow() ;                       
                        public void run(){
                                s3.setType(3) ;
                                while(true){
                                        s3.seal() ;
                                        try {
                                                Thread.sleep(1000) ;
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                }
                        }
                }) ;
        }
}
/*票类
* */
class Ticket{
        private int id ;
        private double price ;
        public int getId() {
                return id;
        }
        public void setId(int id) {
                this.id = id;
        }
        public double getPrice() {
                return price;
        }
        public void setPrice(double price) {
                this.price = price;
        }
}
/*
* 售票窗口
* */
class SealWindow{
        public TicketSealCenter tsc = TicketSealCenter.getInctance() ;
        private Ticket ticket = null ;
        private int type ;                                //售票窗口
       
        //售票
        public void seal(){       
                ticket = new Ticket();
                int id = tsc.getTicket();
                if (id == 0) {
                        System.out.println("第" + SealWindow.this.type + "号窗口暂时没票了,请稍等1秒钟..");
                        try {
                                Thread.sleep(1000);
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                        return ;
                }
                ticket.setId(id);
                ticket.setPrice(TicketPrice.PRICE);
                System.out.println("第" + SealWindow.this.type + "号窗口卖出编号为:"
                                + ticket.getId() + "的票");       
        }

        public int getType() {
                return type;
        }

        public void setType(int type) {
                this.type = type;
        }
}
/*售票中心
* */
class TicketSealCenter{
        private List<Integer> list = new ArrayList<Integer>() ;               
        private int lastTicket = 0;                                //保存最后一张票
        //产生新票
        public synchronized Integer newTicket(){       
                list.add(++lastTicket) ;
                return lastTicket ;
        }
        //取票
        public synchronized Integer getTicket(){               
                if(list.size() > 0){
                        return list.remove(0) ;
                }
                return null ;
        }
        private TicketSealCenter(){                                //单例设计
        }
        private static TicketSealCenter tics = new TicketSealCenter() ;
        public static TicketSealCenter getInctance(){
                return tics ;
        }
}
/*票价类
* */
class TicketPrice{
        public static double PRICE = 50 ;
}
为什么每次运行的时候在买到二十张票的时候就会抛异常,求解?

评分

参与人数 1技术分 +1 收起 理由
朱宏青 + 1 神马都是浮云

查看全部评分

1 个回复

倒序浏览

评分

参与人数 1技术分 +1 收起 理由
朱宏青 + 1 好人一生平安~

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马