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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class Demo01_Tickets implements Runnable{
        public static void main(String[] args) {
                for (int tickets=100; tickets>0; tickets--) {       
       
        Demo01_Tickets mr = new Demo01_Tickets();
        Thread th1 = new Thread(mr,"窗口a");
        Thread th2 = new Thread(mr,"窗口b");
        Thread th3 = new Thread(mr,"窗口c");
        Thread th4 = new Thread(mr,"窗口d");
        th1.start();
        th2.start();
        th3.start();
        th4.start();       
                }
        }
       
        private int tickets = 0;
        @Override
        public void run() {
                synchronized (this) {
                        try {
                                Thread.sleep(100);
                        } catch (Exception e) {

                                e.printStackTrace();
                        }

                        System.out.println("当前窗口为:"+Thread.currentThread().getName()
                                        + ",剩余票数为" + tickets--);
                }
        }

8 个回复

倒序浏览
第一眼就看到你私有的tickets。你卖票是卖0张吗?
回复 使用道具 举报
四个窗口同时卖100张票,你外面加个100循环,里面又设置卖100,,是不止100张的。 所以将for (int tickets=100; tickets>0; tickets--) {}     去掉 ,这个 不用,将 private int tickets = 0;这个私有去掉。。,
回复 使用道具 举报

把你的程序修改了一下,

public class Demo01_Tickets implements Runnable{
    public static void main(String[] args) {
               
   
    Demo01_Tickets mr = new Demo01_Tickets();
    Thread th1 = new Thread(mr,"窗口a");
    Thread th2 = new Thread(mr,"窗口b");
    Thread th3 = new Thread(mr,"窗口c");
    Thread th4 = new Thread(mr,"窗口d");
    th1.start();
    th2.start();
    th3.start();
    th4.start();        
            
    }
   
    private int tickets =100;//票是100张,不是0
    @Override
    public void run() {
            while(true)//这里要循环
            synchronized (this) {
                    if(tickets>=0)//设置循环终止条件
                    {
                    try {
                           
                            Thread.sleep(100);
                    } catch (Exception e) {

                            e.printStackTrace();
                    }

                    System.out.println("当前窗口为:"+Thread.currentThread().getName()
                                    + ",剩余票数为" + tickets--);
                    }
            }
    }
}
回复 使用道具 举报
把循环加到run方法里去
回复 使用道具 举报
学习了。。。。
回复 使用道具 举报
很牛逼的样子,mark了。。
回复 使用道具 举报
yaolv7 中级黑马 2016-5-12 21:46:40
8#
水得漂亮~
回复 使用道具 举报
wubo46 中级黑马 2016-5-12 21:52:05
9#
学习第二天,不知道什么时候才能学到这样,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马