在Brian关于安全施工技术的文章中,您可以读到:
..。通常,当一个对象拥有一个线程时,要么是一个内部类,要么我们将这个引用传递给它的构造函数(或者类本身扩展了thread类)。如果一个对象要拥有一个线程,最好是该对象提供一个start()方法,就像thread那样,并且从start()方法而不是从构造函数启动线程。虽然这确实通过接口公开了类的一些实现细节(例如可能存在一个拥有的线程),但在这种情况下,从构造函数启动线程的风险大于隐藏实现的好处。
我想下面的代码不会有任何问题。因为它不是一个内部类,我也不传递this
的引用。但我想确定。
private Controller controller;
private View view;
public Facade() {
view = new View();
controller = new Controller(view);
controller.start();
}
我一直收到NetBeans警告.这段代码是安全的还是不安全的?
发布于 2012-06-08 08:46:23
在构造函数中没有启动线程的主要原因--在创建"this“之前(在构造函数执行之后)不要公开"this”。在您的代码中,我看不到这样的代码:
new Thread(this);
所以应该会没事的。
https://stackoverflow.com/questions/10945520
复制相似问题