在构造函数中启动线程

时间:2013-01-22 15:05:25

标签: java multithreading

据说不应该在构造函数中启动线程,但我不确定this引用如何在这种情况下转义Test构造函数。我查看了底层的Thread.java,我无法弄清楚这一点。

class Test {

    static MyThread thread;

    public Test() {

        thread = new MyThread();
        thread.start();

    }

}

class MyThread extends Thread {

    public void run() {

        //do stuff

    }

}

感谢您的帮助。

thread = new MyThread();会调用Thread超级构造函数:

public Thread() {
    init(null, null, "Thread-" + nextThreadNum(), 0);
}

我没有看到参考文献的消失。

1 个答案:

答案 0 :(得分:5)

this只有在线程引用this时才会转义(例如,如果它是内部类)

您的帖子未引用this,因此这不是问题。

然而,通常期望构建对象是无副作用的;这不是一个好主意。