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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hzl_0911 初级黑马   /  2014-8-6 01:29  /  887 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

package book.javacore.booka;
//多窗口售票问题
class ticket implements Runnable{
        private int num = 10;
       
        public void run() {
                for(num=10;num>=0;num--){
        System.out.println(Thread.currentThread().getName()+";"+num);
                }
//                while(true){
//                        if(num>0){
//                                 System.out.println(Thread.currentThread().getName()+";"+num--);
//                        }
//                }
        }
}
public class TicketDemo {
        public static void main(String[] args) {
                ticket t = new ticket();
                Thread k1 = new Thread(t);
                Thread k2 = new Thread(t);
                Thread k3 = new Thread(t);
                Thread k4 = new Thread(t);


                k1.start();
                k2.start();
                k3.start();
                k4.start();
        }

}
-----------------------------------------
这个视频上的售票问题,为什么用for循环和while循环得出的结果不同?


3 个回复

倒序浏览
用while循环的结果Thread-0;10
Thread-0;9
Thread-0;8
Thread-0;7
Thread-0;6
Thread-1;5
Thread-1;3
Thread-1;2
Thread-1;1
Thread-0;4
用for循环的结果
Thread-0;10
Thread-0;9
Thread-0;8
Thread-0;7
Thread-0;6
Thread-0;5
Thread-0;4
Thread-0;3
Thread-0;2
Thread-0;1
Thread-0;0
Thread-1;10
Thread-2;10
Thread-2;10
Thread-3;10
Thread-3;9
Thread-3;8
Thread-3;7
Thread-3;6
Thread-3;5
Thread-3;4
Thread-3;3
Thread-3;2
Thread-3;1
Thread-3;0
回复 使用道具 举报
本帖最后由 fxwb2005 于 2014-8-6 01:43 编辑

首先你for里面操作的num是个局部变量 和上面定义的num没有关系 第二 你for循环定义了11次  whil只定义了10次,因为没有实现同步,实际循环的次数肯定不止那么多,但你本身定义就错了。
回复 使用道具 举报
理解了,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马