想要让线程停止,有以下几种方法:
- 正常运行结束导致停止,没什么好说的。
- 通过
thread.stop();
方法停止,线程会马上停止,可能导致数据不同步,不建议使用。 - 把线程设置为守护线程,当没有非守护线程时,JVM会自动退出。
- 通过
interrupt()
中断进行停止(异常停止法),建议使用。
下面详细的介绍下第三种方法:
这个方法可以把线程设置为中断状态,一旦线程在阻塞状态(sleep(),wait(),join())下被中断,都会抛出java.lang.InterruptedException
异常,我们可以通过监测这个异常进行线程停止的操作:
public static void main(String[] args) {
Test thread = new Test();
thread.start();
try {
Thread.sleep(500);
//设置为中断
thread.interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void run() {
super.run();
try {
for (int i = 0; i < 1000000; i++) {
//检测中断状态
if (this.isInterrupted()) {
System.out.println("退出线程");
throw new InterruptedException();
}
System.out.println(i);
}
} catch (InterruptedException e) {
System.out.println("进入catch,线程停止");
e.printStackTrace();
}
}