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