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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柴永菲 黑马帝   /  2011-11-3 21:56  /  2244 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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输出的

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
本帖最后由 fso918 于 2011-11-3 22:29 编辑

四个死循环,能不死机吗?
你没作线程同步,肯定输出不会是有规律的,你多运行几次程序,就可以看到了

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有分,继续努力!

查看全部评分

回复 使用道具 举报
你从DOS环境下运行,应该会出现随即的结果。
回复 使用道具 举报
祁焱 发表于 2011-11-3 22:56
你从DOS环境下运行,应该会出现随即的结果。

嗯好我试试我看老师的就是在dos下运行的是随机的,我以为在dos下和eclipse运行的结果是一样的呢
回复 使用道具 举报
在while循环中没有break,程序一直运行,所以会卡
虽然是4个线程在同时操作,但因为代码运行的很快,不容易看到不同步的情况,可以在while循环中让线程歇一会,Thread.sleep(10),这样更容易看到不同步的现象

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
myeclipse本来就占得内存大,有些程序是不适合在myeclipse下运行的。
回复 使用道具 举报
刘福双 黑马帝 2011-11-3 23:48:08
7#
你这是 4个 死循环 无限  肯定 卡了......操作 占资源啊 还好是有myeclipse   如果是c的话  我记着以前c弄到死循环 得了  只能重启机器.......
回复 使用道具 举报
首先,你的while语句块要for循环里面。
然后,你在栈内存中new了四个线程对象,其实是在调同一个线程(Thread-0),就意味着一个线程,同时被调了四次,能不卡吗?而且没有什么意义.
你可以看一下张老师的专门讲线程的那一块,很详细.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马