黑马程序员技术交流社区

标题: 多线程问题 [打印本页]

作者: hzl_0911    时间: 2014-8-6 01:29
标题: 多线程问题
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循环得出的结果不同?



作者: hzl_0911    时间: 2014-8-6 01:35
用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:37
本帖最后由 fxwb2005 于 2014-8-6 01:43 编辑

首先你for里面操作的num是个局部变量 和上面定义的num没有关系 第二 你for循环定义了11次  whil只定义了10次,因为没有实现同步,实际循环的次数肯定不止那么多,但你本身定义就错了。
作者: hzl_0911    时间: 2014-8-6 01:42
理解了,谢谢!




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