打断正常运行的线程
package cn.meowrain;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(()->{
while (true) {
}
});
t1.start();
log.info("{}", t1.getState());
t1.interrupt();
}
}
这样我们发现t1线程没有被main线程终止,还在运行
interrupt并不能主动停下一个线程
package cn.meowrain;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.TimeUnit;
@Slf4j
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
while (true) {
if (Thread.interrupted()) {
break;
}
}
log.info("线程t1被interrupted");
},"t1");
t1.start();
log.info("{}", t1.getState());
t1.interrupt();
}
}
我们可以获取状态,对循环进行终止
打断在TIME_WAITING状态的线程
package cn.meowrain;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.TimeUnit;
@Slf4j
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
while (true) {
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
log.info("线程t1被interrupted");
throw new RuntimeException(e);
}
}
}, "t1");
t1.start();
TimeUnit.SECONDS.sleep(1);
log.info("{}", t1.getState());
t1.interrupt();
}
}