https://segmentfault.com/a/1190000039696074

java常用的结束一个运行中的线程的方法有3中:使用退出标志,使用 interrupt 方法,使用 stop 方法。

1.使用退出标志

即在线程内部定义一个 bool 变量来判断是否结束当前的线程:

public class ThreadSafe extends Thread {
    public volatile boolean exit = false;
    public void run() {
        while (!exit){
            //do work
        }
    }

    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循环中,而由这个 bool 变量来对 while 循环进行控制。

2.使用 interrupt 方法

这种方法需要判断当前的线程所处于的状态:

(1)当前线程处于阻塞状态时线程处于阻塞状态一般是在使用了 sleep,同步锁的 wait,socket 中的 receiver,accept 等方法时,会使线程处于阻塞状态。