首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中的线程混淆

Java中的线程混淆
EN

Stack Overflow用户
提问于 2015-04-06 05:14:19
回答 1查看 50关注 0票数 -1

这段代码根本不打印主线程。它所做的一切就是打印子线程。但是如果我做了一个改变,也就是把"r.t.start()“语句从这个try块中拿出来,并把它放在它自己的try块中。所以,当我这样做的时候,线程就会像它们应该的那样工作。为什么会发生这种情况?

代码语言:javascript
复制
public class prctc2 {

    public static void main(String args[]) {
        NewThread r = new NewThread();
        try {
            r.t.start();
            for (int i = 1; i <= 5; i++) {
                System.out.println(Thread.currentThread().getName() + i);
                Thread.sleep(1000);
            }
        } catch (Exception e) {}
    }

}

class NewThread implements Runnable {
    Thread t;

    NewThread() {
        t = new Thread(this, "new one");
    }

    public void run() {

        try {
            for (int i = 1; i <= 5; i++) {
                System.out.println(t + " " + i);
                Thread.sleep(500);
            }

        }

        catch (Exception e) {}
    }

}
EN

回答 1

Stack Overflow用户

发布于 2015-04-06 22:14:23

没有答案:但我对你的程序做了一些修改,使它看起来更专业:

已将prctc2更改为Prctc2。类名应该总是大写的。

我从NewThread类中删除了Thread t成员。一个类应该总是只负责一件事:你的类负责两件事:它的第一个责任是打印出从1到5的数字,它的第二个责任是启动线程。

我将.start()调用移到了main() (IMO)中,这使得代码更容易理解。

我将NewThread重命名为MyTask。它不是Thread,由于我上面的更改,它甚至不再有线程,因此"thread“不应该出现在它的名称中。

我更改了异常处理程序以打印堆栈跟踪。你能做的最糟糕的事情之一就是忽略异常。如果你的程序做了任何你不希望它做的事情,这会使你的程序很难调试。

代码语言:javascript
复制
public class Prctc2 {
    public static void main(String args[]) {
        Thread r = new Thread(new MyTask());
        r.start();

        try {
            for (int i = 1; i <= 5; i++) {
                System.out.println(Thread.currentThread().getName() + i);
                Thread.sleep(1000);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class MyTask implements Runnable {
    public void run() {
        try {
            for (int i = 1; i <= 5; i++) {
                System.out.println(t + " " + i);
                Thread.sleep(500);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29462294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档