第一种中断线程的执行的方法是通过在run()方法中使用return语句来提前结束线程。但是,这种方式并不会真正中断线程的执行,而只是提前将run()方法返回,正常执行后续代码。
在你提供的代码中,使用第一种方式时,当run为false时,线程的执行会跳出循环并执行return语句,但是线程并没有被真正中断,仍会继续执行其余的代码,直至run()方法结束。
要实现真正的线程中断,可以使用Thread.interrupt()方法来中断线程。调用该方法会设置线程的中断标志位,然后需要在线程的执行逻辑中判断中断标志位,并根据需要做出相应的处理。
以下是修改后的代码示例,使用Thread.interrupt()方法来中断线程的执行:
public class ThreadTest09 {
public static void main(String[] args) {
MyRunnable6 r = new MyRunnable6();
Thread t = new Thread(r);
t.setName("分支线程t");
t.start();
// 5秒后想让它中断
try {
Thread.sleep(1000 * 5);
} catch (InterruptedException e) {
e.printStackTrace();
}
t.interrupt(); // 中断线程
r.run = false;
}
}
class MyRunnable6 implements Runnable {
boolean run = true;
@Override
public void run() {
for (int i = 0; i < 10; i++) {
if (Thread.currentThread().isInterrupted()) {
System.out.println("线程已被中断");
return; // 根据需要进行处理,可以提前结束线程
}
if (run) {
System.out.println(Thread.currentThread().getName() + " ----> " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("线程被中断");
return; // 根据需要进行处理,可以提前结束线程
}
} else {
return; // 根据需要进行处理,可以提前结束线程
}
}
}
}
通过以上修改,当调用t.interrupt()方法时,线程将通过判断中断标志位来提前结束执行。
请注意,在run()方法中使用Thread.currentThread().isInterrupted()方法来判断线程的中断状态,并根据需要进行相应的处理。同时,在捕获InterruptedException异常时,也可以通过return语句提前结束线程的执行。
希望能帮助到你!如果你还有任何问题,请随时提问。
如果问题已经解决,请设置最佳答案 |