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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 穆帆 中级黑马   /  2015-9-25 22:35  /  653 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Demo {
        public static void main(String[] args) {
                //1.实例化一个票池;
                Tickets tic = new Tickets();
                //2.实例化三个线程,模拟三个窗口售票
                MyThread t1 = new MyThread(tic);
                MyThread t2 = new MyThread(tic);
                MyThread t3 = new MyThread(tic);
                //3.设置线程名称
                t1.setName("窗口1");
                t2.setName("窗口2");
                t3.setName("窗口3");
               
                //4.启动线程
                t1.start();
                t2.start();
                t3.start();
               
               
        }
}
import java.util.TreeSet;

public class MyThread extends Thread{
        private Tickets tic;
        private int count;
        private TreeSet<Integer> tree = new TreeSet<>();
        public MyThread(Tickets t){                                     这个构造方法的作用在哪里?
                this.tic = t;                                                             求解这里为什么要用This?
        };
        public void run() {
                while(true){
                        int t = this.tic.getTicket();
                        if(t > 0){
                        //        System.out.println(this.getName() + " 抢到票:" + t);     
                                tree.add(t);                                                                         票池里面已经有了此方法,为什么还要继续写?
                        }else{
                        //        System.out.println("没票了,不抢了");
                                break;
                        }
                }
                System.out.println(this.getName() + " 共抢到 : " + tree.size() + " 张票,明细:" + tree);
               
        }
}

public class Tickets {
        private int ticketNo = 100;
        public int getTicket(){//窗口1
                synchronized (this) {
                        if(this.ticketNo > 0){//窗口1
                                return this.ticketNo--;//窗口1
                        }else{
                                return 0;
                        }
                }
        }
       
}


2 个回复

倒序浏览
你是大神。学到了多线程,我还没看到这里,帮顶。
回复 使用道具 举报
你是大神。学到了多线程,我还没看到这里,帮顶。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马