当前位置: 首页 > 知识库问答 >
问题:

在Thread类中重写Interrupt&isInterrupted

丘学海
2023-03-14
public class MyThread extends Thread {

    private boolean isInterrupted = false;

    @Override 
    public void interrupt() {
        isInterrupted = true;
        super.interrupt();
    }

    @Override
    public boolean isInterrupted() {
        return isInterrupted;
    }

    public void run() {
        .........
        .........

        try {
            object1.wait();
        } catch (InterruptedException e) {
            /* if interrput() is not overrided, the interrupted flag 
            would be reset */
        }

        if(Thread.currentThread().isInterrupted()) {
            /* if interrupt is not overrided, isInterrupted would return
            false and the thread would continue to run. */
            return;
        }

        object2.method1(); // method1() can also wait on another object
        /* In method1() also we would need to check isInterrupted and get out
        quickly as soon as possible. This method1() will also be used by
        other threads which will not be interrupted. */

        if(Thread.currentThread().isInterrupted()) {
            return;
        }
        .........
        .........
    }
}

共有1个答案

诸葛阳成
2023-03-14

首先,重写这些方法是一个非常糟糕的主意。

第二,我不明白你为什么让你的生活如此艰难:

try {
  doSomethingThatCanBlock();// e.g. wait()
}
catch(InterruptedException ex) {
  Thread.currentThread().interrupt(); // restore interrupt state
}

现在,下次检查线程的中断状态时,它将告诉您适当的状态。就是这样。

 类似资料:
  • 本文向大家介绍浅谈Java线程Thread之interrupt中断解析,包括了浅谈Java线程Thread之interrupt中断解析的使用技巧和注意事项,需要的朋友参考一下 这一篇我们说说Java线程Thread的interrupt中断机制。 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等待新的任务或

  • 问题内容: 我已阅读并重新阅读了《 Java Concurrency in Practice》,在此主题中阅读了多个线程,阅读了IBM文章《处理InterruptedException》,但我根本不了解某些我认为可以打破的东西。分为两个问题: 如果我从来没有自己打过其他线程,什么会触发 InterruptedException ? 如果我从未使用自己的 interrupt() 中断其他线程(例如,

  • 描述 (Description) java.lang.Thread.interrupt()方法中断此线程。 中断不活动的线程不会产生任何影响。 声明 (Declaration) 以下是java.lang.Thread.interrupt()方法的声明 public void interrupt() 参数 (Parameters) NA 返回值 (Return Value) 此方法不返回任何值。

  • 问题内容: 我在扩展基类并覆盖基类中的方法。但是当我称它为超类版本时。如何覆盖该方法? 我希望它打印“这是:孩子”,但它打印“这是:超级” 问题答案: 我找到了答案(从这里改编:https : //gist.github.com/Zodiase/af44115098b20d69c531)-基类也需要以ES6方式定义:

  • 在Swift中,有人能解释一下如何用从原始属性子类的另一个对象重写超类的属性吗? 如果将底盘改为“var”,则会出现错误: 我在指南中“重写属性”下找到的唯一东西表明,我们必须重写getter和setter,这可能用于更改属性的值(如果它是'var'),但更改属性类怎么办?

  • 我有一个基类,它定义了类方法,用于返回用于构建服务url的各种信息。基类还定义了一个用于构建该url的实例方法。我希望基类有这个方法的默认实现,这样当我需要url不同时,我只需要在子类中重写它。我如何让这个基方法调用重写的类方法来使用子类中的类方法构建url?下面是我现在的代码,但它不起作用: 基类方法: op ationId、operationVersion和方法类型是在子类中实现的类方法,但是