假设我有以下内容:
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类的工作开始时才更有效?
答案 0 :(得分:4)
run()
方法调用B构造函数然后返回。所以这是在生成的线程中发生的唯一事情:执行B的构造函数。在构造函数中运行长进程是一种严重的设计气味。构造函数并不意味着执行一长串指令。它们意味着构建一个对象。
代码最好如下所示:
Thread t = new Thread(new Runnable() {
@Override
public void run() {
B b = new B();
b.doSomethingLong();
}
});
另请注意,如果您不启动该主题,则根本不会发生任何事情:
t.start();