-
继承自Thread实现的线程
public class TestThread extends Thread{ String threadName; public TestThread(@NonNull String name) { super(name); this.threadName = name; } @Override public void run() { super.run(); String threadName = Thread.currentThread().getName(); System.out.println(threadName + " interrupt flag: " + isInterrupted()); while(!isInterrupted()) { System.out.println(threadName + " inner while interrupt flag: " + isInterrupted()); } System.out.println(Thread.currentThread().getName() + " outer interrupt flag: " + isInterrupted()); } }
在TestThread线程的run()中,可以直接使用isInterrupted() 来判断当前线程是否已经被中断。
-
实现Runnable接口的线程类
static class MYRunnable implements Runnable{ private String threadName = Thread.currentThread().getName(); @Override public void run() { System.out.println(threadName + " Runnable isInterrupted flag :" + Thread.currentThread().isInterrupted()); while(!Thread.currentThread().isInterrupted()) { System.out.println(threadName + " Runnable inner while interrupted flag :" + Thread.currentThread().isInterrupted()); } System.out.println(Thread.currentThread().getName() + " Runnable outer interrupted flag : " + Thread.currentThread().isInterrupted()); } }
而通过实现Runnable接口的实现的线程,在run()中想要判断当前线程是否处于中断状态,则不能直接使用isInterrupted()来,因为Runnable是一个接口,不是线程。 所以可以使用
Thread.currentThread().isInterrupted()来判断。另外在MYRunnable 的属性threadName 和在run()中的
Thread.currentThread().getName() 获取的线程的名字是不一样的。
threadName 的线程名字是main,代表的是主线程的名字,因为创建的MYRunnable 是在主线程中创建的。
而在run()中的
Thread.currentThread().getName() 获取的线程的名字是自定义线程的名字。
继承自Thread和实现Runnable接口线程的isInterrupted使用方法区别
于 2022-04-07 19:14:44 首次发布