java - 当用户命令停止时,如何在 Java 命令提示符中停止线程?

标签 java multithreading

基本上,我有一个在控制台中运行的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/

相关文章:

java - FragmentManager 清理 .addToBackStack

Java反射: set super class field during initialization

java - 两个线程访问频繁更新的 Arraylist 的问题

c++ - 在一个简单的 C++ 11 四线程程序中,如果我注释 stdout 打印行,我的两个消费者线程不会返回

java - 如何创建一个监听状态变化的线程?

java - 为什么 Kubernetes 需要更新 cacerts

java - 为什么在 GSON 中使用 JsonNull?

java - 错误时如何从Mono <A>返回Mono <B>?

java - 推文分析: How to design

java - StreamGobbler - 接受输入的线程? java