为什么在Java中(或任何地方)皱眉的构造函数中启动一个新线程。我收到了Netbeans的警告,但它没有给我任何重构建议。我正在编写一个客户端/服务器Swing应用程序,我正在启动的线程在服务器的JFrame构造函数中,以便持续监听客户端数据报。
为什么这不是好的做法,我应该如何避免呢?
答案 0 :(得分:24)
从构造函数启动一个线程,让启动的线程在正确构造之前访问正在构造的对象,从而使一个未完全构造的对象可用于新线程。
您可以在构造函数中创建线程,并提供一个“启动”方法从外部启动线程。
或者您可以将构造函数和启动方法设为私有,并提供静态工厂方法,该方法将创建对象,启动线程并返回创建的对象。
答案 1 :(得分:1)
请查看此链接http://www.ibm.com/developerworks/java/library/j-jtp0618/index.html#code4
这与对this
和subclassing
的隐式引用有关。
答案 2 :(得分:0)
使类最终化,也可能是一种解决方案,因为将没有子类。