我们可以在同一个对象的构造函数中调用 thread_object.start()
吗?
这种做法是个好主意吗?
答案 0 :(得分:6)
你可以这样做,但这被认为是不好的做法。在article中有一个关于在构造函数中启动Threads的段落。
在评论中说明了好的机器人,您的问题似乎与this重复。看看Heath Borders在那里的回答。
答案 1 :(得分:2)
只是出于兴趣 - 为什么要扩展Thread?为什么不实现Runnable,您可以获得更大的灵活性(例如,可以在您创建的线程中执行,也可以在ExecutorService中执行,这是首选方法)。
答案 2 :(得分:1)
这是一种不好的做法,因为您无法确定该对象是否已完全初始化。即使你在构造函数的末尾调用start()方法,也可能导致混乱。
请注意处理器可以不按顺序执行操作:
1: MyObject(){
2: aVariable = anyValue;
3: this.start();
4: }
处理器可以自由地在第2行之前执行第3行,因为它们不相关(以单线程方式),因此你可能最终得到未经初始化的变量(甚至最终变量)和其他意想不到的东西。
答案 3 :(得分:0)
我建议在外面启动线程,而不是从Constructor调用。在构造函数中,您应该只进行初始化。
答案 4 :(得分:-1)
只要您启动的主题没有this
的引用,那么您就可以了。如果线程确实有this
的引用(通过内部类间接传递给线程),那么从构造函数启动它是一个坏主意,因为对象没有完全初始化。