Java中终止线程的方式主要有三种:
1、使用stop()方法,已被弃用。
原因是:stop()是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的“残疾”数据,不符合完整性,所以被废弃。
2、使用interrupt()中断的方式。
注意使用interrupt()方法中断正在运行中的线程只会修改中断状态位,可以通过isInterrupted()判断。如果使用interrupt()方法中断阻塞中的线程,那么就会抛出InterruptedException异常,可以通过catch捕获异常,然后进行处理后终止线程。有些情况,我们不能判断线程的状态,所以使用interrupt()方法时一定要慎重考虑。
3、使用标志位(推荐)
现在用一个例子来讲解利用标志位来中断运行的线程的例子。
1、创建一个线程类ThreadClass类
package com.threadDemo;
public class ThreadClass extends Thread{
private String name;
private boolean flag=true;
public void setFlag(boolean flag){
this.flag = flag;
}
public ThreadClass(String name){
this.name = name;
}
public void run(){
System.out.println("线程*****************"+name+"******************************已经创建");
for(int i=0;i<5;i++){
System.out.println(name+"创建了: "+i);
}
while(flag){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("持续运行中....");
}
System.out.println("************************线程结束啦************************");
}
}
2、主类ThreadClassTest 通过flag标志位来控制线程的运行与终止
package com.threadDemo;
public class ThreadClassTest {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
boolean flag;
ThreadClass t1 = new ThreadClass("夏夏");
t1.start();
Thread.sleep(10000);
//设置标志位
flag = false;
t1.setFlag(flag);
}
}
运行结果: