Java线程生命周期

时间:2015-08-23 13:38:18

标签: java multithreading

假设我有以下内容:

public class A
{
    Thread t = new Thread(new Runnable() {
                      @Override
                            public void run() {

                    B b = new B();
                            }
                        });
    }

    class B{
     // long running process and alot of code
    }

问题是,B类所做的所有过程和工作都是在线程t下进行的,还是只是在创建了B类的对象并且B类的工作开始时才更有效?

1 个答案:

答案 0 :(得分:4)

run()方法调用B构造函数然后返回。所以这是在生成的线程中发生的唯一事情:执行B的构造函数。在构造函数中运行长进程是一种严重的设计气味。构造函数并不意味着执行一长串指令。它们意味着构建一个对象。

代码最好如下所示:

Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        B b = new B();
        b.doSomethingLong();
    }
});

另请注意,如果您不启动该主题,则根本不会发生任何事情:

t.start();