https://segmentfault.com/a/1190000039696074
java常用的结束一个运行中的线程的方法有3中:使用退出标志,使用 interrupt 方法,使用 stop 方法。
即在线程内部定义一个 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 循环进行控制。
这种方法需要判断当前的线程所处于的状态:
(1)当前线程处于阻塞状态时线程处于阻塞状态一般是在使用了 sleep,同步锁的 wait,socket 中的 receiver,accept 等方法时,会使线程处于阻塞状态。