Java中interrupted 和 isInterruptedd方法的区别?
1 个回答
首先你要快乐,其次都是其次。木兰### Java 中 `interrupted` 和 `isInterrupted` 方法的区别 在 Java 的多线程编程中,线程中断机制是通过内部标识来实现的。了解 `interrupted()` 和 `isInterrupted()` 方法的区别对正确处理线程中断非常重要。 #### `interrupted()` 方法 - **静态方法**:`interrupted()` 是 `Thread` 类的静态方法。 - **作用**:检查当前线程的中断状态,并且会清除中断状态。 - **返回值**:返回 `true` 表示当前线程已被中断,返回 `false` 表示未被中断。 - **副作用**:调用该方法后,当前线程的中断状态会被清除。 ```java public static boolean interrupted() ``` #### `isInterrupted()` 方法 - **实例方法**:`isInterrupted()` 是 `Thread` 类的实例方法。 - **作用**:检查调用该方法的线程对象的中断状态,不会清除中断状态。 - **返回值**:返回 `true` 表示该线程已被中断,返回 `false` 表示未被中断。 - **副作用**:调用该方法不会改变线程的中断状态。 ```java public boolean isInterrupted() ``` ### 具体区别 1. **中断状态的清除**: - `interrupted()`:会清除当前线程的中断状态。 - `isInterrupted()`:不会清除线程的中断状态。 2. **适用场景**: - `interrupted()`:用于检查并清除当前线程的中断状态,适用于需要重置中断标识的情况。 - `isInterrupted()`:用于检查指定线程的中断状态,不会影响该线程的中断状态。 ### 示例代码 以下是一个示例,演示了 `interrupted()` 和 `isInterrupted()` 的使用区别: ```java public class InterruptedExample { public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { System.out.println("Thread is running..."); try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("Thread is interrupted during sleep."); // 这里重新设置中断状态,因为InterruptedException会清除中断状态 Thread.currentThread().interrupt(); } } System.out.println("Thread exiting..."); }); thread.start(); // 主线程休眠2秒以确保子线程运行 Thread.sleep(2000); // 中断子线程 thread.interrupt(); // 检查子线程的中断状态,不会清除中断状态 System.out.println("Is thread interrupted? " + thread.isInterrupted()); // 再次检查子线程的中断状态,并清除中断状态 System.out.println("Is thread interrupted? " + Thread.interrupted()); } } ``` ### 输出示例 ```java Thread is running... Thread is running... Thread is interrupted during sleep. Thread exiting... Is thread interrupted? true Is thread interrupted? false ``` ### 关键点总结 - **`interrupted()` 方法**: - 静态方法,用于检查并清除当前线程的中断状态。 - 返回当前线程的中断状态,并重置该状态为 `false`。 - **`isInterrupted()` 方法**: - 实例方法,用于检查指定线程的中断状态。 - 返回线程的中断状态,不会改变该状态。 - **使用场景**: - 当需要检查并重置当前线程的中断状态时,使用 `interrupted()` 方法。 - 当需要检查其他线程的中断状态且不影响其中断状态时,使用 `isInterrupted()` 方法。 理解这两个方法的区别有助于更好地控制和处理 Java 多线程中的中断机制。发布于 2024-07-24 19:25 •IP属地 宁夏举报评论收藏
公众号进入网站体验更佳

