如何更好的结束线程

在java中,每段线程都是运行了不同的任务,可能有的线程刚执行了任务,有的线程任务已经执行了一半了,后者有的任务执行快要结束了,所以线程的关闭需要考虑到各种情况,不是简单的使用stop()destory()等方法
最优方案是让其运行完(也就是方法执行完毕),干净地释放掉所有资源,然后退出。如果是一个不断循环运行的线程,就需要用到线程间的通信机制,让主线程通知其退出

这里有个概念,daemon线程和非daemon线程
daemom线程的生命周期依附于主线程,当主线程执行完毕,daemom无论业务逻辑是否执行完毕,都会马上终止,通过使用Thread.setDaemon(true)将线程设置为守护线程

 

 

package com.java.test.daemom;

import lombok.extern.slf4j.Slf4j;

/**
 * @Description:
 * @Author: Yourheart
 * @Create: 2022/10/30 21:29
 */
@Slf4j
public class DaeMomThreadDemo extends Thread {
    @Override
    public void run() {
       while (true){
           String name = Thread.currentThread().getName();
           log.info("【守护线程】name:{}",name);
           try {
               Thread.sleep(500);
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
       }
    }
}

  

package com.java.test.daemom;

import lombok.extern.slf4j.Slf4j;

/**
 * @Description:
 * @Author: Yourheart
 * @Create: 2022/10/30 21:32
 */
@Slf4j
public class ThreadDemo extends Thread {

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            log.info("非Daemon线程");
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

  

package com.java.test.daemom;

/**
 * @Description:
 * @Author: Yourheart
 * @Create: 2022/10/30 21:28
 */
public class ThreadTest {
    public static void main(String[] args) {
        DaeMomThreadDemo daeMomThreadDemo=new DaeMomThreadDemo();
        daeMomThreadDemo.setDaemon(true);
        daeMomThreadDemo.start();
        new ThreadDemo().start();
    }
}

  

 

 

posted @ 2022-10-30 22:18  不忘初心2021  阅读(51)  评论(0编辑  收藏  举报