首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在java中中断来自另一个线程的线程?

如何在java中中断来自另一个线程的线程?
EN

Stack Overflow用户
提问于 2021-03-14 11:55:58
回答 2查看 73关注 0票数 1

我正在写一个简单的程序。

代码语言:javascript
复制
class MyThread extends Thread {
private int count = 0;
public void run() {
    while(true) {
        System.out.println(count++);

        try { currentThread().sleep(2000); }
        catch (InterruptedException ignored) { }
    }
  }
}

代码语言:javascript
复制
class MyThreadStopper extends Thread {
       MyThread obj ;
       MyThreadStopper(MyThread obj) {
           this.obj = obj;
       }
     public void run() {
        String userInput ;
        while(true) {
            userInput = (new Scanner(System.in)).next();

            if( userInput.length() > 2) {
                obj.interrupt();
                currentThread().interrupt();
            }
            try{ currentThread().sleep(1000); }
            catch (InterruptedException ignored) { } 
        }
     }
  }

使用一个线程打印,另一个不同类的线程获取输入。我不确定我在哪里做错了。

代码语言:javascript
复制
class temp {
    public static void main(String[] args) {
        MyThread obj = new MyThread();
        MyThreadStopper objStop = new MyThreadStopper(obj);
        obj.start();
        objStop.start();
    }
}

因为它一直在无限打印,即使我尝试打印userInput并在userInput之后删除if

EN

回答 2

Stack Overflow用户

发布于 2021-03-14 12:08:57

你忽略了中断:你可以在线程被中断时停止它(或者做一些其他的事情,取决于需求)

代码语言:javascript
复制
class MyThread extends Thread {
private int count = 0;
public void run() {
    while(!interrupted) {
        System.out.println(count++);

        try { currentThread().sleep(2000); }
        catch (InterruptedException e) {
            // we got interrupted, time to do something
            interrupted = true;
        }
    }
  }
}

通常,通过中断线程来停止它通常不是一个好的解决方案。

票数 1
EN

Stack Overflow用户

发布于 2021-03-14 12:10:03

代码语言:javascript
复制
class MyThread extends Thread {
private int count = 0;
public void run() {
    while(true) {
        System.out.println(count++);

        try { currentThread().sleep(2000); }
        catch (InterruptedException ignored) { 
            System.out.println("Interrupted");
            break;
        }
    }
  }
}

一旦你抓到了InterruptedException,你什么也没做。所以循环还在继续。上面修改过的代码应该打印"Interrupted“& break。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66620943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档