为什么不在构造函数中启动一个线程?如何终止?
我正在学习如何在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
}
}
这有效,但我的编译器标记了一个警告说:在构造函数中启动一个新线程是危险的。为什么是这样?
这个问题的第二部分是:如果我在一个线程中运行一个循环(串口侦听线程),我在第二个线程中输入一个exit命令。如何获得第一个终止线程?谢谢。
没有找到相关结果
已邀请:
4 个回复
雇砰
的构造函数中启动一个线程逃脱
。这意味着您实际上是在完全构造对象之前给出了对象的引用。线程将在构造函数完成之前启动。这可能导致各种奇怪的行为。 对于你的第二个问题:没有可接受的方法强制另一个线程在Java中停止,所以你将使用一个线程将检查的变量来知道它是否应该停止。另一个线程将其设置为指示第一个线程将停止。变量必须是volatile或所有访问同步以确保正确发布。这里有一些代码可能就像你想要的那样。
无论想要创建和启动线程,都可以:
无论什么想要阻止线程会做:
慰泥悍瓶
在这个例子中,MyClass.this被称为逃避构造函数。这意味着该对象可用于引用,但可能无法创建在构造函数中构建的所有字段。把这个带到另一个层次,如果b是
你会期望它可用但是没有确保。这被称为部分构造的对象,在java中完全合法。
埃输林桨铃
方法检查第二个线程是否已被终止,如果是,则使用
关键字关闭第一个线程的循环,如果没有必要,将终止
纤洞需匪