1.使用Thread.stop()?
极力不推荐此方式,此函数不安全且已废弃,具体可参考Java API文档
2.设置终止标识,例如:
import static java.lang.System.out; public class TestThread extends Thread { private boolean terminationFlag; public void run() { for (int i = 0; i != 10000000; ++i) { if (terminationFlag) break; out.println(i + 1); } } public void terminate() { terminationFlag = true; } }
3.使用Thread.interrupt()
interrupt()函数本身并不能终止线程,需要做一些处理方可终止线程
①若线程任务中包含Object.wait()、Thread.sleep(long)等可能引发InterruptedException的函数,则在调用interrupt()后会抛出InterruptedException
import static java.lang.System.out; import java.util.logging.Logger; import java.util.logging.Level; public class TestThread extends Thread { private static final Logger LOGGER = Logger.getLogger("TestThread"); public void run() { for (int i = 0; i != 10000000; ++i) { try { Thread.sleep(100); out.println(i + 1); } catch (InterruptedException ex) { LOGGER.log(Level.SEVERE, null, ex); break; //执行break后退出循环,run()也将执行完毕 } } } }
②若线程任务中不包含可能引发InterruptedException的函数,则可将Thread.isInterrupted()的返回值作为终止标识
import static java.lang.System.out; public class TestThread extends Thread { public void run() { for (int i = 0; i != 10000000; ++i) { if (isInterrupted()) break; out.println(i + 1); } out.println("TestThread.run() will be finished"); } }