Java 在构造函数中启动线程
在这本书中,你可以读到: […]通常,当一个对象拥有一个线程时,要么该线程是一个内部类,要么我们将this引用传递给它的构造函数(或者该类本身扩展了thread类)。如果一个对象将拥有一个线程,最好像线程一样提供start()方法,并从start()方法而不是构造函数启动线程。虽然这确实通过接口公开了类的一些实现细节(例如可能存在一个拥有的线程),但这通常是不可取的,在这种情况下,从构造函数启动线程的风险大于实现隐藏的好处 我想使用下面的代码应该不会有任何问题。因为它不是一个内部类,我也没有传递Java 在构造函数中启动线程,java,concurrency,Java,Concurrency,在这本书中,你可以读到: […]通常,当一个对象拥有一个线程时,要么该线程是一个内部类,要么我们将this引用传递给它的构造函数(或者该类本身扩展了thread类)。如果一个对象将拥有一个线程,最好像线程一样提供start()方法,并从start()方法而不是构造函数启动线程。虽然这确实通过接口公开了类的一些实现细节(例如可能存在一个拥有的线程),但这通常是不可取的,在这种情况下,从构造函数启动线程的风险大于实现隐藏的好处 我想使用下面的代码应该不会有任何问题。因为它不是一个内部类,我也没有传递
this
的引用。但我想确定一下
private Controller controller;
private View view;
public Facade() {
view = new View();
controller = new Controller(view);
controller.start();
}
但我一直收到NetBeans警告。。。那么,这段代码是安全的还是不安全的?主要原因是不在构造函数中启动线程-不要在创建“this”之前(在构造函数执行之后)公开“this”。在您的代码中,我没有看到类似以下代码:
new Thread(this);
所以应该没问题。你有什么问题吗?@Robert ok;)“那么这个代码是安全的还是不安全的?”