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


                        public class Demo2_Synchronized {

                                /**
                                 * @param args
                                 * 需求:铁路售票,一共100张,通过四个窗口卖完.
                                 */
                                public static void main(String[] args) {
                                        TicketsSeller t1 = new TicketsSeller();
                                        TicketsSeller t2 = new TicketsSeller();
                                        TicketsSeller t3 = new TicketsSeller();
                                        TicketsSeller t4 = new TicketsSeller();
                                       
                                        t1.setName("窗口1");
                                        t2.setName("窗口2");
                                        t3.setName("窗口3");
                                        t4.setName("窗口4");
                                        t1.start();
                                        t2.start();
                                        t3.start();
                                        t4.start();
                                }
                       
                        }
                       
                        class TicketsSeller extends Thread {
                                private static int tickets = 100;
                                static Object obj = new Object();
                                public TicketsSeller() {
                                        super();
                                       
                                }
                                public TicketsSeller(String name) {
                                        super(name);
                                }
                                public void run() {
                                        while(true) {
                                                synchronized(obj) {
                                                        if(tickets <= 0)
                                                                break;
                                                        try {
                                                                Thread.sleep(10);//线程1睡,线程2睡,线程3睡,线程4睡
                                                        } catch (InterruptedException e) {
                                                               
                                                                e.printStackTrace();
                                                        }
                                                        System.out.println(getName() + "...这是第" + tickets-- + "号票");
                                                }
                                        }
                                }
                        }

评分

参与人数 3黑马币 +9 收起 理由
niwota + 2 赞一个!
ninini + 4 神马都是浮云
wowowo + 3 很给力!

查看全部评分

11 个回复

正序浏览
原来是这样子啊
回复 使用道具 举报
android_vae 发表于 2016-6-2 10:30
你把睡眠时间该长一点试试应该就没问题了,我认为是CPU的问题

我的也出现这种情况了.不知道为什么
回复 使用道具 举报
你把睡眠时间该长一点试试应该就没问题了,我认为是CPU的问题
回复 使用道具 举报
确实有待研究,我试了一下,只有两个线程
回复 使用道具 举报
还没学到、、、路过学习
回复 使用道具 举报
确实很奇怪。。
回复 使用道具 举报
有点意思,是电脑cpu的问题吗?
回复 使用道具 举报
是一直都是么????只有一个线程执行???
回复 使用道具 举报
代码都是一样的完全没更改,很好奇这是为什么
回复 使用道具 举报
这里所说的不一样并不是说,线程执行的先后,是说我的电脑就一个线程把整个代码执行完了.别的线程没执行.而其他同学的却是有交替的

评分

参与人数 1黑马币 +5 收起 理由
641846178 + 5 神马都是浮云

查看全部评分

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