(三)线程的终止

Java多线程目录

前提

刚接触线程时一直想怎么立刻停止线程,现在了解了,对于现在电脑来说,立刻终止线程会造成各种各样的问题,所以在Java中,线程的终止就是为了让线程自动执行完,下面终止线程的方法最终目的都是这样。

中断

中断是当前线程的一个标志位,在线程内外的表现就是true/false,
中断的三个方法

public void interrupt();   //设置中断
public boolean isInterrupted();  //只判断标记位
public static boolean interrupted();  //静态方法,判断标记为并清除标记位

这里在实例中说明这三个方法

public class ThreadOne extends Thread{
    @Override
    public void run() {
        super.run();
        while (!Thread.currentThread().isInterrupted()) {
            System.out.println("1::" + Thread.currentThread().isInterrupted());
        }
        System.out.println("线程结束1:" + Thread.currentThread().isInterrupted());

        System.out.println("线程结束2:" + Thread.interrupted());
        System.out.println("线程结束3:" + Thread.interrupted());
    }

    public static void main(String[] args) {

        ThreadOne one = new ThreadOne();
        one.start();

        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        one.interrupt();
    }
}

输出:

1::false
1::false
1::false
1::false
线程结束1:true
线程结束2:true
线程结束3:false

这样就可以安全的利用中断来停止我们的线程。
注意:中断并不会立即停止我们的线程,它只会设置标志位,来让线程主动检测,后我们自己设置线程停止返回逻辑。

自己设置标记位

和中断思路一样,我们自己设置标记为是一样的效果。

public class ThreadOne extends Thread {

    private volatile boolean end = false;
    @Override
    public void run() {
        super.run();

        while (!end) {
            System.out.println("1::" + end);
        }
        System.out.println("线程结束1:" + end);
    }

    public void cancle(){
        this.end = true;
    }

    public static void main(String[] args) {

        ThreadOne one = new ThreadOne();
        one.start();

        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        one.cancle();
    }
    
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,602评论 1 15
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 3,115评论 1 18
  • 林炳文Evankaka原创作品。转载自http://blog.csdn.net/evankaka 本文主要讲了ja...
    ccq_inori阅读 738评论 0 4
  • 线程 操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有...
    go以恒阅读 1,800评论 0 6
  • 1 基础概念 1.1 CPU核心数和线程数的关系 1.1.1 CPU与线程数量 cpu个数:是指物理上,也及硬件上...
    攻城狮哦哦也阅读 634评论 0 1

友情链接更多精彩内容