前言
昨天刚刚接触多线程,但是一打开多线的常用的三种常用的创建方式就会发现,它们确实有停止的方式,但是后面有大大的标识——已过时。
所以只有找其他的办法解决了,那么就不卖关子了,进入今天的主题——结束线程
一、结束线程的常见方式
1、自然退出:run()执行完之后自动退出,这种行为是可预测的。当然这也是最好得方式。
2、强制退出:传统方式是使用suspend()和resume()来暂停或者恢复线程,或者最后的选择使用stop()来结束线程。但是在实际中都不会使用这三个方式,因为它们操作线程时,根本不知道线程的内部状态,这样会导致不可预知的情况发生,所以不推荐使用!
二、结束线程的正确方式(代码演示)
代码如下(关闭方法):
public class EndThread implements Runnable{
private boolean isRun = false; // 创建有个boolean类型的私有的isRun元素,初始值赋予false
public EndThread(boolean isRun) {// 生成EndThread带参的构造函数
this.isRun = isRun;
}
@Override
public void run() { // 重写Runnable自带的run()方法
int counter = 0; // 设置结束线程的条件
while(isRun) { // 设置while循环方便后续测试滚动看效果
counter++; // 自增
System.out.println("counter"+counter);
if(counter==10) { // 线程停止条件
isRun = false; // 控制线程停止
}
}
}
}
代码如下(测试):
public class Test03 {
public static void main(String[] args) {
EndThread endThread = new EndThread(true);// 创建一个新的EndThread对象的同时做启动线程的准备
Thread thread = new Thread(endThread);
thread.start();// 启动线程
}
}
代码如下(输出):
counter1
counter2
counter3
counter4
counter5
counter6
counter7
counter8
counter9
counter10
总结
果然在通过条件判断哪里,线程就结束,如果没有条件结束,那么这个线程将一直持续下去,演变成一个死循环,嘿嘿,因为我写的就是一个死循环,这种线程的结束相对于哪三种强制结束的方法就温和得多,代码很简单,是为了直观的表述原理,期望指正哦!