`
西口西
  • 浏览: 10003 次
社区版块
存档分类
最新评论

JAVA线程对象2.3:interrupt方法(参考官方)

    博客分类:
  • java
 
阅读更多

线程中断

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.docx

    ### Java线程中断机制详解:`interrupt`与`stop`方法 #### 一、引言 在Java多线程编程中,线程控制是至关重要的技术之一。有时我们需要在特定条件下停止某个线程的执行,或者中断正在等待的线程。Java提供了多种...

    java多线程教程java多线程教程

    - **中断线程**:通过调用线程的`interrupt()`方法来中断线程,线程可以通过检查是否被中断来决定是否继续执行。 - **加入线程**:使用`join()`方法可以使当前线程等待另一个线程结束。 #### 四、总结 Java中的多...

    java线程基础讲解

    ### Java线程基础详解 #### 一、线程概述 **1.1 什么是线程?** 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。在Java中,线程是程序执行流的最小单元,一个标准的...

    Java线程知识

    ### Java线程知识详解 #### 一、线程基础 **1.1 什么是线程?** 线程是操作系统能够进行运算调度的最小单位,它...通过本文的学习,你应该能够掌握Java线程的基本概念和使用方法,并能够开始编写简单的多线程程序。

    Java多线程和并发知识整理

    Java线程有新建、可运行、运行、阻塞、等待、超时等待和终止等状态。 2.2 使用方式 可以通过`Thread`类或`Runnable`接口创建线程,使用start()方法启动。 2.3 基础机制 包括线程调度、上下文切换等。 2.4 中断 线程...

    java就业培训教程(个人整理)

    - **interrupt()**:中断线程。 #### 第6章:Java API - **6.1 理解API的概念**: - **定义**:Application Programming Interface,应用程序编程接口。 - **作用**:提供一系列预定义的功能,简化开发过程。 ...

    Java Concurrent Programming

    线程中断是一种控制线程运行状态的方式,可以通过调用`interrupt()`方法来中断线程。需要注意的是,中断操作并不立即停止线程,而是设置线程的中断标志。 ##### 2.4 阻塞方法 在多线程环境中,某些方法可能需要...

    Java编程基础

    - **线程的终止**: 使用`interrupt()`方法中断线程。 - **线程的同步**: 使用`synchronized`关键字或`Lock`接口实现同步。 - **线程的通信**: 通过共享变量实现线程间的通信。 - **中断阻塞线程**: 使用`interrupt()...

    Java面试题-并发.docx

    根据提供的文档信息,我们可以归纳出以下几个关键的知识点: ### 1....以上知识点涵盖了Java中HashMap的关键方面以及多线程的基础和高级特性,对于准备Java面试的开发者来说是非常宝贵的参考资料。

    Core Java 2 Volume II 7th Edition

    Java中通过`Thread.interrupt()`方法来实现线程的中断。 #### 1.3 线程状态 Java中的线程有多种状态,包括新建状态、就绪状态、运行状态、阻塞状态和终止状态等。 #### 1.4 线程属性 线程属性主要包括线程优先级、...

    山东大学操作系统nachos实验报告

    5. **更新线程状态:** 在线程结束时,通过`finish()`函数更新线程的状态并唤醒所有等待的线程。 ```java public static void finish() { Lib.debug(dbgThread, "Finishing thread: " + currentThread.toString...

    java核心知识点整理.pdf

    本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 ...........................

    JAVA核心知识点整理(有效)

    2.2.3. 本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 .....................

    Java并发编程实践

    1.3.3 使用中断(Interrupt)取消线程........................................................................15 1.3.4 使用Stop 终止线程........................................................................

Global site tag (gtag.js) - Google Analytics