线程中断
interrupt方法作用是告知线程停止手头的工作转而去做别的事。通过interrupt终止线程是很常见的,不过你完全可以设定线程如何响应中断。这也是本节的重点。
调用某一线程的interrupt方法可以中断该线程。但想要中断机制正常工作,首先要得到线程支持。
支持中断
线程如何支持中断?这取决于线程当前在执行的内容。如果线程频繁调用抛出中断异常(InterruptedException)的方法,它就会在捕获异常后从run方法返回。例如,假设一个线程run方法中有一个循环,想要支持中断机制,它可以这样改:
for (int i = 0; i < importantInfo.length; i++) { // 休眠4秒 try { Thread.sleep(4000); } catch (InterruptedException e) { // 线程被中断 return; } // 打印语句 System.out.println(importantInfo[i]); }
很多方法都会抛出中断异常(InterruptedException),比如sleep方法,如果收到中断信息,就会马上中断当前操作并返回。
如果线程运行了很长时间,而且没有调用任何抛出中断异常的方法,这时候又该怎样呢?那它必须定期调用Thread.interrupted方法来判断线程是否已被中断,如果是则返回true 。例如:
for (int i = 0; i < inputs.length; i++) { heavyCrunch(inputs[i]); if (Thread.interrupted()) { // 线程被已被终止 return; } }
在这个简单的例子中,代码只是单纯地测试是否被中断,如果是,就退出。在复杂的应用程序中,最好还是抛出一个InterruptedException :
if (Thread.interrupted()) { throw new InterruptedException(); }
这样写,就把处理线程中断的代码都集中在catch语句里头了。
线程中断状态标识
线程中断机制是靠一个叫中断状态(interrupt status)的内部标识来实现的。调用了Thread.interrupt来设置该标志。如果线程调用静态方法Thread.interrupted 检查中断,中断状态(interrupt status)便被清除。但使用其他线程的非静态isInterrupted方法来查询某线程的中断状态,是不会改变该线程的中断状态标识的(interrupt status flag)。
原文:
相关推荐
### Java线程中断机制详解:`interrupt`与`stop`方法 #### 一、引言 在Java多线程编程中,线程控制是至关重要的技术之一。有时我们需要在特定条件下停止某个线程的执行,或者中断正在等待的线程。Java提供了多种...
- **中断线程**:通过调用线程的`interrupt()`方法来中断线程,线程可以通过检查是否被中断来决定是否继续执行。 - **加入线程**:使用`join()`方法可以使当前线程等待另一个线程结束。 #### 四、总结 Java中的多...
### Java线程基础详解 #### 一、线程概述 **1.1 什么是线程?** 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。在Java中,线程是程序执行流的最小单元,一个标准的...
### Java线程知识详解 #### 一、线程基础 **1.1 什么是线程?** 线程是操作系统能够进行运算调度的最小单位,它...通过本文的学习,你应该能够掌握Java线程的基本概念和使用方法,并能够开始编写简单的多线程程序。
Java线程有新建、可运行、运行、阻塞、等待、超时等待和终止等状态。 2.2 使用方式 可以通过`Thread`类或`Runnable`接口创建线程,使用start()方法启动。 2.3 基础机制 包括线程调度、上下文切换等。 2.4 中断 线程...
- **interrupt()**:中断线程。 #### 第6章:Java API - **6.1 理解API的概念**: - **定义**:Application Programming Interface,应用程序编程接口。 - **作用**:提供一系列预定义的功能,简化开发过程。 ...
线程中断是一种控制线程运行状态的方式,可以通过调用`interrupt()`方法来中断线程。需要注意的是,中断操作并不立即停止线程,而是设置线程的中断标志。 ##### 2.4 阻塞方法 在多线程环境中,某些方法可能需要...
- **线程的终止**: 使用`interrupt()`方法中断线程。 - **线程的同步**: 使用`synchronized`关键字或`Lock`接口实现同步。 - **线程的通信**: 通过共享变量实现线程间的通信。 - **中断阻塞线程**: 使用`interrupt()...
根据提供的文档信息,我们可以归纳出以下几个关键的知识点: ### 1....以上知识点涵盖了Java中HashMap的关键方面以及多线程的基础和高级特性,对于准备Java面试的开发者来说是非常宝贵的参考资料。
Java中通过`Thread.interrupt()`方法来实现线程的中断。 #### 1.3 线程状态 Java中的线程有多种状态,包括新建状态、就绪状态、运行状态、阻塞状态和终止状态等。 #### 1.4 线程属性 线程属性主要包括线程优先级、...
5. **更新线程状态:** 在线程结束时,通过`finish()`函数更新线程的状态并唤醒所有等待的线程。 ```java public static void finish() { Lib.debug(dbgThread, "Finishing thread: " + currentThread.toString...
本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 ...........................
2.2.3. 本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 .....................
1.3.3 使用中断(Interrupt)取消线程........................................................................15 1.3.4 使用Stop 终止线程........................................................................