黑马程序员技术交流社区

标题: 一样的代码,两台电脑运行,却是不一样的结果 [打印本页]

作者: GAREN    时间: 2016-6-2 00:54
标题: 一样的代码,两台电脑运行,却是不一样的结果

                        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-- + "号票");
                                                }
                                        }
                                }
                        }
作者: GAREN    时间: 2016-6-2 00:55
这里所说的不一样并不是说,线程执行的先后,是说我的电脑就一个线程把整个代码执行完了.别的线程没执行.而其他同学的却是有交替的
作者: GAREN    时间: 2016-6-2 01:00
代码都是一样的完全没更改,很好奇这是为什么
作者: 善良的死神达乐    时间: 2016-6-2 01:02
是一直都是么????只有一个线程执行???
作者: ninini    时间: 2016-6-2 01:32
有点意思,是电脑cpu的问题吗?
作者: dubei1993    时间: 2016-6-2 07:27
确实很奇怪。。
作者: SkyBlack    时间: 2016-6-2 08:30
还没学到、、、路过学习
作者: android_vae    时间: 2016-6-2 10:28
确实有待研究,我试了一下,只有两个线程
作者: android_vae    时间: 2016-6-2 10:30
你把睡眠时间该长一点试试应该就没问题了,我认为是CPU的问题
作者: niwota    时间: 2016-6-2 20:44
android_vae 发表于 2016-6-2 10:30
你把睡眠时间该长一点试试应该就没问题了,我认为是CPU的问题

我的也出现这种情况了.不知道为什么
作者: qq415997288    时间: 2016-6-2 21:02
原来是这样子啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2