1

Brian Goetz 关于安全施工技术的文章中,您可以阅读:

[...] 通常当一个对象拥有一个线程时,要么该线程是一个内部类,要么我们将 this 引用传递给它的构造函数(或者该类本身扩展了 Thread 类)。如果一个对象要拥有一个线程,最好该对象提供一个 start() 方法,就像 Thread 一样,从 start() 方法而不是从构造函数启动线程。虽然这确实通过接口暴露了类的一些实现细节(例如可能存在的自有线程),这通常是不可取的,但在这种情况下,从构造函数启动线程的风险超过了实现隐藏的好处。

我想使用以下代码应该没有任何问题。因为它不是内部类,我也没有传递this. 但我想确定。

private Controller controller;
private View view;

public Facade() {
    view = new View();
    controller = new Controller(view);
    controller.start();
}

我不断收到 NetBeans 警告......那么这段代码是安全的还是不安全的?

4

1 回答 1

0

主要原因不在构造函数中启动线程 - 在创建“this”之前(在执行构造函数之后)不要暴露“this”。在您的代码中,我看不到这样的代码:

new Thread(this);

所以应该没问题。

于 2012-06-08T08:46:23.643 回答