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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马伟奇 黑马帝   /  2011-12-17 13:58  /  2272 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马伟奇 于 2011-12-18 12:16 编辑

我用IDE直接执行和用DEBUG模式执行结果不一样,同样的代码。求解决


public class ThreadDemo4 implements Runnable {

        @Override
        public void run(){
        for(int i = 0 ; i<5;i++){
                System.out.println(Thread.currentThread().getName());
        }               
        }
        public static void main(String[] args) {
            ThreadDemo4 td = new ThreadDemo4();
            Thread t = new Thread(td,"线程");
            t.start();
            for(int i = 0; i<5;i++){
                    if(i>2){
                            try {
                                        t.join();
                                } catch (Exception e) {
                                        // TODO: handle exception
                                }
                    }
                    System.out.println("main线程运行"+i);
            }
    }

}

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

5 个回复

倒序浏览
哥们这个程序在写法上就不太OK,程序能执行,结构也正确,但是易读性较差,玩多线程的时候,如果代码写的太乱的话,很麻烦,本来线程的执行就有不可确定性,指不定在什么地方就出错了。首先定义个线程和主程序要分开。没必要都掺和在一起。如果可以的话可以使用匿名类。但是不要像上面这个搞法。写程序的要求一般是:易读,复用,可移植。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
应该不仅仅是IDE直接执行和用DEBUG模式执行结果不一样,就算都是在IDE中执行结果也有可能不一样。
因为每个线程的执行时间是由CPU分配的,每次分配的时间不一定相等。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
Sponge 黑马帝 2011-12-17 21:41:41
板凳
线程这个东西是会不一样的,靠操作系统决定线程之间的时间分配和切换的。
回复 使用道具 举报
试试同步
回复 使用道具 举报
刘健 黑马帝 2011-12-18 11:52:05
地板
线程执行是要由CPU来分配的,具体时间不好掌握,所以你的t.join()的时间就可能每次都不一样了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马