对你的第一个问题:在构造函数中启动一个线程,传入这里。这意味着你实际上是在完全构造之前给出对你的对象的引用。线程将在你的构造函数完成之前启动。这可能导致各种奇怪的行为。
对于你的第二个问题:没有可接受的方法强制另一个线程在Java中停止,所以你会使用一个变量,线程会检查它是否应该停止。另一个线程将其设置为指示第一个线程将停止。变量必须是易失性的或所有访问同步以确保正确发布。这里是一些代码,这将是一个像你想要的东西。
public class MyNewThread implements Runnable {
private final Thread t;
private volatile boolean shouldStop = false;
MyNewThread() {
t = new Thread (this, "Data Thread");
}
public void start() {
t.start();
}
public void stop() {
shouldStop = true;
}
public void run() {
while(!shouldStop)
{
// do stuff
}
}
}
无论想要创建和启动线程都会做:
MyNewThread thread = new MyNewThread();
thread.start();
任何想要停止线程会做:
thread.stop();