在Java中,interrupted()和isInterrupted()都是用于线程中断处理的方法,但是它们的使用方式和含义是不同的。
interrupted()方法
interrupted()是一个静态方法,用于检测当前线程是否被中断,并清除线程的中断状态。方法的使用方式如下:
boolean isInterrupted = Thread.interrupted();
如果当前线程的中断状态为true,则返回true,并清除线程的中断状态;如果线程的中断状态为false,则返回false。需要注意的是,如果这个方法返回true,则中断状态被清除,该线程将无法继续中断,调用该线程的isInterrupted()方法也会返回false。
以下是一个示例:
public class InterruptedExample {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
while (true) {
if (Thread.currentThread().isInterrupted()) {
System.out.println("Thread is interrupted");
break;
}
}
});
thread.start();
Thread.sleep(1000);
thread.interrupt();
}
}
这个示例中创建一个新线程,线程一直在检查中断状态,如果中断状态为true,则跳出循环并输出信息。主线程在等待1秒后中断新线程,此时会输出"Thread is interrupted"。需要注意的是,因为调用了interrupted()方法来检查中断状态,线程在跳出循环后中断状态已被清除。
isInterrupted()方法
isInterrupted()方法用于判断当前线程是否被中断,但不会清除线程的中断状态。方法的使用方式如下:
boolean isInterrupted = thread.isInterrupted();
如果当前线程的中断状态为true,则返回true;否则返回false。
以下是一个示例:
public class IsInterruptedExample {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
while (true) {
if (Thread.currentThread().isInterrupted()) {
System.out.println("Thread is interrupted");
} else {
System.out.println("Thread is running");
}
}
});
thread.start();
Thread.sleep(1000);
thread.interrupt();
}
}
这个示例中创建一个新线程,线程一直在检查中断状态,如果中断状态为true,则输出中断信息;否则输出运行信息。主线程在等待1秒后中断新线程,此时会输出"Thread is interrupted"。由于调用的是isInterrupted()方法,线程在输出信息后中断状态仍为true,因此会继续输出中断信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中的interrupted()和isInterrupted() - Python技术站