java-为什么不在构造函数中启动线程? 如何终止?
我正在学习如何在Java中使用线程。 我写了一个实现Runnable的类,以同时运行到另一个线程。 主线程处理侦听串行端口,而第二个线程将处理向同一端口发送数据。
public class MyNewThread implements Runnable {
Thread t;
MyNewThread() {
t = new Thread (this, "Data Thread");
t.start();
}
public void run() {
// New Thread code here
}
那里第一个线程像这样启动第二个:
public class Main {
public static void main(String[] args) throws Exception{
new MyNewThread();
// First thread code there
}
}
这可行,但是我的编译器会标出警告语:在构造函数中启动新线程很危险。 为什么是这样?
该问题的第二部分是:如何在一个线程(串行端口侦听线程)中运行循环,并在第二个线程中键入退出命令。 如何获得第一个终止的线程? 谢谢。
4个解决方案
45 votes
对于第一个问题:在传递this的构造函数中启动线程会逃逸this。这意味着您实际上是在完全构造对象之前给出对您对象的引用。 该线程将在构造函数完成之前启动。 这会导致