黑马程序员技术交流社区

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

作者: 柴永菲    时间: 2011-11-3 21:56
标题: 有关线程问题
public class ticket implements Runnable {
        private int tick=10;
        public void run() {
                while(true){
                        if(tick>0){
                        System.out.println(Thread.currentThread().getName()+"---sale"+tick--);
                               
                        }
                }
        }

        /**
         * @param args
         */
        public static void main(String[] args) {
                ticket t=new ticket();
                Thread t1=new Thread(t);
                Thread t2=new Thread(t);
                Thread t3=new Thread(t);
                Thread t4=new Thread(t);
                t1.start();
                t2.start();
                t3.start();
                t4.start();
               
        }

}
为什么这个程序在myeclipse里面运行之后电脑会很卡,之后只能强制关机,还有就是老师的视频上的tick输出的怎么是随机的,我的是按照10,9,8,7、、、、2、1输出的
作者: fso918    时间: 2011-11-3 22:29
本帖最后由 fso918 于 2011-11-3 22:29 编辑

四个死循环,能不死机吗?
你没作线程同步,肯定输出不会是有规律的,你多运行几次程序,就可以看到了
作者: 祁焱    时间: 2011-11-3 22:56
你从DOS环境下运行,应该会出现随即的结果。
作者: 柴永菲    时间: 2011-11-3 23:03
祁焱 发表于 2011-11-3 22:56
你从DOS环境下运行,应该会出现随即的结果。

嗯好我试试我看老师的就是在dos下运行的是随机的,我以为在dos下和eclipse运行的结果是一样的呢
作者: 黄健    时间: 2011-11-3 23:04
在while循环中没有break,程序一直运行,所以会卡
虽然是4个线程在同时操作,但因为代码运行的很快,不容易看到不同步的情况,可以在while循环中让线程歇一会,Thread.sleep(10),这样更容易看到不同步的现象
作者: 罗亚东    时间: 2011-11-3 23:45
myeclipse本来就占得内存大,有些程序是不适合在myeclipse下运行的。
作者: 刘福双    时间: 2011-11-3 23:48
你这是 4个 死循环 无限  肯定 卡了......操作 占资源啊 还好是有myeclipse   如果是c的话  我记着以前c弄到死循环 得了  只能重启机器.......
作者: 王德云    时间: 2011-11-4 02:07
首先,你的while语句块要for循环里面。
然后,你在栈内存中new了四个线程对象,其实是在调同一个线程(Thread-0),就意味着一个线程,同时被调了四次,能不卡吗?而且没有什么意义.
你可以看一下张老师的专门讲线程的那一块,很详细.




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