如果我将运行功能覆盖为,

Thread t = new Thread(){
                public void run(){
                    try {
                        if(Thread.currentThread().isInterrupted()) {
                            doSomePrcocess() // is the isInerrupted() flag seeting to true?
                            return; //Terminates the current Thread
                        }
                        //otherwise
                        runScript();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
            t.start();

然后,如果我从代码的任何点调用Thread.currentThread().interrupt(),线程是否应该在那里停止并在那一点开始运行doSomeProcess()?如果是,那么中断标志如何设置为true?如果没有,该怎么做?

最佳答案

  • 如果线程处于 sleep 或等待状态,请在线程上调用interrupt()方法,以中断 sleep 或等待状态


  • 如果线程未处于 sleep 或等待状态,则调用
    interrupt()方法执行正常行为,不会中断线程,但会将中断标志设置为true。

  • 线程类具有处理线程中断的规定
    public void interrupt()
    public static boolean interrupted()
    public boolean isInterrupted()
    

    如果打算只执行一次doSomePrcocess,则必须继续执行,它将检查并清除连续调用的线程中断状态。
    public static boolean interrupted()
    

    在下面使用将仅检查状态,而不进行修改。
    public boolean isInterrupted()
    

    10-06 01:58