您正在启动的线程没有做任何事情。它在您调用时启动a.start()并立即终止,因为该线程没有运行代码。在此之后,启动新线程并处理点击事件的同一线程进入无限循环,因此您的用户界面被完全阻塞。
您需要为新线程执行一些代码。为此,您可以传递线程 aRunnable或覆盖线程的run()方法。例如,要给它一个Runnable包含每 2 秒打印一次的循环,您可以这样做:
final Thread a = new Thread(new Runnable() {
@Override public void run() {
while (true) {
try {
Thread.sleep(2000);
System.out.println("code");
} catch (InterruptedException e) {
break;
}
}
}
};
a.start();
之后,如果您想停止该线程,则需要a在字段或其他内容中保存对该线程的引用,然后调用a.interrupt(). 这将导致sleep抛出一个InterruptedException,它将被捕获并执行break,这将终止无限循环并允许线程到达run方法的末尾,从而终止线程。
例如:
private Thread a = null;
... click handler on start button ... {
if (a == null) {
a = new Thread(new Runnable() {
@Override public void run() {
while (true) {
try {
Thread.sleep(2000);
System.out.println("code");
} catch (InterruptedException e) {
break;
}
}
}
};
a.start();
}
}
... click handler on "stop" button ... {
if (a != null) {
a.interrupt();
a = null;
}
}