方式一
使用退出标识,使得线程正常退出,即当run方法完成后进程终止。
private int tickeys=10;
private boolean flag=true;
@Override
public void run() {
while (flag){
try {
buyTickey();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void buyTickey() throws InterruptedException {
if(tickeys<=0){
flag=false;
return;
}
利用标识符flag判定线程是否继续执行。
方式二
使用stop强行中断线程(此方法为作废过期方法),不推荐使用,暴力终止,可能使一些清理性的工作得不到完成。还可能对锁定的内容进行解锁,容易造成数据不同步的问题。
方式三
使用interrupt方法中断线程
既然 stop() 方法如此粗暴,不建议使用,我们如何优雅地结束线程呢?
线程只有从 runnable 状态(可运行/运行状态) 才能进入terminated 状态(终止状态),如果线程处于 blocked、waiting、timed_waiting 状态(休眠状态),就需要通过 Thread 类的 interrupt() 方法,让线程从休眠状态进入 runnable 状态,从而结束线程。
- 组合使用interrupt方法与interruptted/isinterrupted方法终止正在运行的线程 + 抛异常法/Return法
线程停止——抛异常法
public class MyThread4 extends Thread {
@Override
public void run() {
super.run();
for (int i = 0; i < 50000