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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 穆顺涛 初级黑马   /  2015-5-2 15:23  /  558 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怎么给下面的多线程售票窗口改名为“售票窗口1”、“售票窗口2”、“售票窗口3”
class Test6
{
        public static void main(String[] args)
        {  
                Ticket ti=new Ticket();
                SealWindow sw=new SealWindow(ti);
                TicketSealCenter tsc=new TicketSealCenter(ti);
                //开辟三个售票窗口,一个售票中心
                Thread t1=new Thread(sw);
                Thread t2=new Thread(sw);
                Thread t3=new Thread(sw);
                Thread t4=new Thread(tsc);
               
                t1.start();
                t2.start();
                t3.start();
                t4.start();
               
               


        }
}
class Ticket//资源
{
        private int count=0;//记录生产的票数
        private String name;
        private boolean flag;
        public synchronized void setTicket()
        {
                while(flag)
                        try
                        {
                                wait();
                        }
                        catch (Exception e)
                        {
                        }
                        count++;
                        System.out.println(Thread.currentThread().getName()+"--生产票--"+count);
                        flag=true;
                        notifyAll();
        }
        public synchronized void sealTicket()
        {
                while(!flag)
                        try
                        {
                                wait();
                        }
                        catch (Exception e)
                        {
                        }
                        Thread.currentThread().setName("售票中心");
                        System.out.println(Thread.currentThread().getName()+".....消费票....."+count);
                        //当消费出500张票时return,避免唤醒t1,t2,t3中等待的线程而继续执行setTicket()方法多生产一张票。
                        if(count==500)
                                return;
                        flag=false;
                        notifyAll();
        }
}
class SealWindow implements Runnable//消费票
{
        private Ticket ti;
       
        SealWindow(Ticket ti)
        {
                this.ti=ti;
        }
        public void run()
        {       
                for(int x=0;x<500;x++)
                        ti.setTicket();
        }
       
}
class TicketSealCenter implements Runnable//生产票
{
        private Ticket ti;
        TicketSealCenter(Ticket ti)
        {
                this.ti=ti;
        }
        public void run()
        {       
                for(int x=0;x<500;x++)
                        ti.sealTicket();
        }
}

2 个回复

倒序浏览
Thread有包含线程名字的构造方法的呀,在new的时候初始化就可以了Thread(Runnable target, String name);
回复 使用道具 举报
感觉super(name)即可的样子
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马