Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在构造函数中启动线程_Java_Concurrency - Fatal编程技术网

Java 在构造函数中启动线程

Java 在构造函数中启动线程,java,concurrency,Java,Concurrency,在这本书中,你可以读到: […]通常,当一个对象拥有一个线程时,要么该线程是一个内部类,要么我们将this引用传递给它的构造函数(或者该类本身扩展了thread类)。如果一个对象将拥有一个线程,最好像线程一样提供start()方法,并从start()方法而不是构造函数启动线程。虽然这确实通过接口公开了类的一些实现细节(例如可能存在一个拥有的线程),但这通常是不可取的,在这种情况下,从构造函数启动线程的风险大于实现隐藏的好处 我想使用下面的代码应该不会有任何问题。因为它不是一个内部类,我也没有传递

在这本书中,你可以读到:

[…]通常,当一个对象拥有一个线程时,要么该线程是一个内部类,要么我们将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;)“那么这个代码是安全的还是不安全的?”