java - 在构造函数中启动线程

标签 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 super 构造函数:

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

我没有看到任何引用文献消失。

最佳答案

this 仅当线程引用 this 时才能转义(例如,如果它是内部类)

您的线程没有引用this,因此这不是问题。

然而,构造一个对象通常应该是没有副作用的;这不是一个好主意。

关于java - 在构造函数中启动线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14461626/

相关文章:

java - 如何从存储过程返回值

java - 没有可用于配置选项的 Java 编译器 compilerClassName : [null] and compiler: [null]

c++ - 待定并发容器性能

c++ - 由于 QCoreApplication 事件循环,QThread 永远不会退出

c++ - 如何创建一系列线程以按启动顺序执行任务?

java - 在Android中获取JPG的RGB

javascript - Wicket:通过 Javascript 更新文本字段

c# - 处理套接字服务器中的超时

python - 槽在哪个线程中执行,我可以将其重定向到另一个线程吗?

java - 对不同类型的对象进行排序(性能)