zoukankan      html  css  js  c++  java
  • 在Java中如何正确地终止一个线程

    1.使用Thread.stop()?

       极力不推荐此方式,此函数不安全且已废弃,具体可参考Java API文档

    2.设置终止标识,例如:

    import static java.lang.System.out;
    public class TestThread extends Thread
    {
        private boolean terminationFlag;
        public void run()
        {
            for (int i = 0; i != 10000000; ++i)
            {
                if (terminationFlag)
                    break;
                out.println(i + 1);
            }
        }
        public void terminate()
        {
            terminationFlag = true;
        }
    }

    3.使用Thread.interrupt()

       interrupt()函数本身并不能终止线程,需要做一些处理方可终止线程

       ①若线程任务中包含Object.wait()、Thread.sleep(long)等可能引发InterruptedException的函数,则在调用interrupt()后会抛出InterruptedException

    import static java.lang.System.out;
    import java.util.logging.Logger;
    import java.util.logging.Level;
    public class TestThread extends Thread
    {
        private static final Logger LOGGER = Logger.getLogger("TestThread");
        public void run()
        {
            for (int i = 0; i != 10000000; ++i)
            {
                try
                {
                    Thread.sleep(100);
                    out.println(i + 1);
                }
                catch (InterruptedException ex)
                {
                    LOGGER.log(Level.SEVERE, null, ex);
                    break;  //执行break后退出循环,run()也将执行完毕
                }
            }
        }
    }

    ②若线程任务中不包含可能引发InterruptedException的函数,则可将Thread.isInterrupted()的返回值作为终止标识

    import static java.lang.System.out;
    public class TestThread extends Thread
    {
        public void run()
        {
            for (int i = 0; i != 10000000; ++i)
            {
                if (isInterrupted())
                    break;
                out.println(i + 1);
            }
            out.println("TestThread.run() will be finished");
        }
    }
  • 相关阅读:
    解读setTimeout, promise.then, process.nextTick, setImmediate的执行顺序
    规范git commit提交记录和版本发布记录
    《Javascript设计模式与开发实践》--读书笔记
    一个简洁明了的表达式拼接例子.md
    前端知识分享.md
    PHP常用框架.md
    关于软件版本以及VS版本扩展介绍
    WPF 优秀控件.md
    Deepin 常见问题锦集
    一些面向对象的设计法则
  • 原文地址:https://www.cnblogs.com/buyishi/p/9159157.html
Copyright © 2011-2022 走看看