java 结束线程

作者: chenxuxu | 来源:发表于2018-07-22 20:32 被阅读13次

前言

一般线程执行完 run 方法后,线程就正常结束了。但有时候 run 方法永远不会结束。因此,此时需要特殊处理,结束线程。

第一种方法

添加标志位

  public class MyThread extends Thread {
      public volatile boolea exit = false;

      public void run() {
          while (!exit) {
              // do something
          }
      }
  }

第二种方法

使用 stop 方法终止。不推荐使用,原因有三个:

  1. stop 方法已经被标识为过时方法;
  2. stop 方法终止,会发生不可预料的结果。比如运行一半,突然终止。会导致代码逻辑不完整,对结果不可预测;
  3. 会破坏锁的原子操作。假设线程中有锁,调用 stop 后,会将内部的所有锁释放,其他获取的原子操作数据,可能就是不准确的。

第三种方法

使用 interrupt 方法。interrupt 跟标志位方法很像,但是在阻塞状态也能退出来。

分两种情况,
第一种是线程未进入阻塞状态,调用 interrupt 后,中断标识为变成 true。中断标识为 while (!isInterrupted());

第二种就是阻塞状态调用 interrupt 后,线程中会抛出一个异常,捕获异常并跳出循环即可。

两者结合后,代码如下:

    public class MyThread extends Thread {

        @Override
        public void run() {
            super.run();
            while (!isInterrupted()) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    break;
                }
            }
        }
    }

相关文章

  • java 结束线程

    前言 一般线程执行完 run 方法后,线程就正常结束了。但有时候 run 方法永远不会结束。因此,此时需要特殊处理...

  • java和android子线程中抛出异常的研究

    Java语言 java语言里, 子线程中抛出的RuntimeException, 只会使得子线程结束运行, 不会...

  • java中如何结束线程

    java中如何结束线程 我们可以使用interrupt()方法来结束线程 此方法分为两种情况: (1)线程处于阻塞...

  • 2021-01-22 主线程与守护线程

    默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守护线程运...

  • Java 内存模式 HB法则

    Java内存模型 HB法则 概述 HB 7法则:volatile、start线程开始、join线程结束、lock锁...

  • 并发类面试题

    1.java线程中的守护线程和用户线程概述 只要当JVM实例中尚存任何一个非守护线程没有结束,守护线程...

  • 守护线程和用户线程

    1.用户线程和守护线程的区别用户线程和守护线程都是线程,区别是Java虚拟机在所有用户线程dead后,程序就会结束...

  • Java 并发之线程中断

    一、前言 所谓线程中断,其实就是终止一个线程。在使用 Java 线程时,除了线程自行正常结束,很多时候也需要提前结...

  • Java线程

    首先了解一下什么是线程,再讨论Java中线程的创建和结束。 一、线程和进程 1.1 线程和进程的区别 线程和进程都...

  • 停止及中断运行的线程

    停止线程的方式 在 Java 中停止线程的方式有三种:1、线程的 run 方法执行到最后,线程正常结束并退出;2、...

网友评论

    本文标题:java 结束线程

    本文链接:https://www.haomeiwen.com/subject/vdxbuftx.html