Java终止线程的三种方法,GitHub重磅官宣

   public volatile boolean exit = false;  



  public void run() {  

      while (!exit) {

          //do something

      }

  }  



  public static void main(String[] args) throws Exception  {  

      ThreadFlag thread = new ThreadFlag();  

      thread.start();  

      sleep(5000); // 主线程延迟5秒 

      thread.exit = true;  // 终止线程thread 

      thread.join();  

      System.out.println("线程退出!");  

  }  

}




或者,run方法中如果你不是使用while循环处理,则可以隔一段代码调用一次标志位判断:



public class ThreadFlag extends Thread {

  public volatile boolean exit = false;  



  public void run() {  

      //do something

      if (!exit)return;

      //do something

      if (!exit)return;

      //do something

      if (!exit)return;

      //do something

      if (!exit)return;

  }  

}




**2\. 使用stop方法强制终止线程**



使用stop方法可以强行终止正在运行或挂起的线程。我们可以使用如下的代码来终止线程:  

`thread.stop();`



虽然这样可以终止线程,但使用stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,因此,并不推荐使用stop方法来终止线程。



**3\. 使用interrupt终止线程**



使用interrupt方法来终端线程可分为两种情况:  

(1)线程处于阻塞状态,如使用了sleep方法。  

(2)使用`while(!isInterrupted()){……}`来判断线程是否被中断。  

在第一种情况下使用interrupt方法,sleep方法将抛出一个InterruptedException例外,而在第二种情况下线程将直接退出。



第一种情况示例代码:



public class ThreadInterrupt extends Thread {

public void run()  {  

    try {  

        sleep(50000);  // 延迟50秒 

    }  

    catch (InterruptedException e) {  

        System.out.println(e.getMessage());  

    }  

}  

public static void main(String[] args) throws Exception  {  

    Thread thread = new ThreadInterrupt();  

    thread.start();  

    System.out.println("在50秒之内按任意键中断线程!");  

    System.in.read();  

    thread.interrupt();  

    thread.join();  

总结

【Android 详细知识点思维脑图(技能树)】

Java终止线程的三种方法,GitHub重磅官宣

我个人是做Android开发,已经有十来年了,目前在某创业公司任职CTO兼系统架构师。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

Java终止线程的三种方法,GitHub重磅官宣

CodeChina开源项目:《Android学习PDF+架构视频+面试文档+源码笔记》

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

频+面试文档+源码笔记》](https://codechina.csdn.net/m0_60958482/android_p7)**

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

最后,赠与大家一句话,共勉!

上一篇:浅谈Java和Go的程序退出


下一篇:This system is registered to Red Hat Subscription Management, but is not receiving updates. You can use subscription-manager to assign subscriptions.