美文网首页
(三)线程的终止

(三)线程的终止

作者: 覆水无言 | 来源:发表于2020-03-11 16:21 被阅读0次

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();
    }
    
}

相关文章

  • (三)线程的终止

    Java多线程目录 前提 刚接触线程时一直想怎么立刻停止线程,现在了解了,对于现在电脑来说,立刻终止线程会造成各种...

  • 线程池(3)终止线程池原理

    终止线程池 一、终止线程池方法 1、 shutdown() 安全的终止线程池 2、 shutdownNow() 强...

  • 【多线程】——4.安全的终止线程

    安全的终止线程 线程正常执行结束,就会终止 除了正常结束外,还有什么方法终止? 设置线程终止标志 public c...

  • 多线程(三)

    线程终止 1.run方法正常退出,线程自然终止2.因为一个没有捕获的异常终止了run方法,线程意外终止 线程中断 ...

  • 多线程编程之两阶段终止模式

    对于多线程编程,如何优雅的终止子线程,始终是一个值得考究的问题。如果直接终止线程,可能会产生三个问题: 子线程当前...

  • threading模块中join()和setDaemon()

    setDaemon():将该线程声明为守护线程setDaemon(True),子线程会随着父线程的终止而终止;否则...

  • 线程终止

    线程终止 通过 stop 终止 已被 jdk 弃用,它可能导致线程安全问题。 通过 interrupt 终止 推荐...

  • 线程终止

    通知终止 场景:在主线程中启动子线程,如何让主线程通知到子线程,从而让子线程终止

  • 多线程系列09-线程终止与线程中断

    线程终止:在Thread类中JDK给我们提供了一个终止线程的方法stop(); 该方法一经调用就会立即终止该线程,...

  • 两阶段终止模式

    一个线程执行完自己的任务,自己就会进入终止状态。但是如果使用一个线程T1,终止线程T2,如何优雅的终止线程。优雅指...

网友评论

      本文标题:(三)线程的终止

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