基本上,我有一个在控制台中运行的Java线程,它将无限地运行,除非用户输入“halt”,否则程序应该停止线程并停止控制台。
这是线程的 set_interval 部分的样子(用户可以输入他们想要的线程之间的间隔时间):
public void set_interval(int mins, int secs) {
time = (mins * 60000) + (1000 * secs);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
try {
count += counter;
String name = getName();
Date date = new Date();
System.out.print("\n" + "Thread:" + name + " " + date + " - counter: " + count);
Thread.sleep(time);
} catch(InterruptedException e){
System.out.print(e);
}
}, 0, time);
}
这是 main 的样子:
}else if (checkLine.equals("halt")){
线程测试 = new Thread("名称");
测试.中断();
休息;
}
我看的每个地方都说要使用中断,但这个中断似乎不起作用。有人有什么想法吗?还是我只是忽略了一些小细节?我有可能需要使用套接字来解决这个问题。
最佳答案
中断只会中断你中断的线程。在您的代码中,您创建了您中断的线程,但不会影响其他线程。
您可以中断计时器中的线程,除非您记录中断,但继续执行,就好像它没有发生一样,即它不会停止线程。
我会为此使用 ScheduleExecutorService,因为它支持 shutdownNow()
,它会停止线程池并中断所有正在运行的任务。
关于java - 当用户命令停止时,如何在 Java 命令提示符中停止线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12969694/