`
silentlakeside
  • 浏览: 109054 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java多线程 -- 中断线程(Interrupt)

 
阅读更多

以下部分内容来源于The Java Tutorials > Essential Classes > Concurrency 和JDK1.6的API文档。

 

interrupt方法

interrupt字面上是中断的意思,但在Java里Thread.interrupt()方法实际上通过某种方式通知线程,并不会直接中止该线程。具体做什么事情由写代码的人决定,通常我们会中止该线程。

  • 如果线程在调用Object类的wait()、wait(long)或wait(long, int)方法,或者该类的 join()join(long)join(long, int)sleep(long)sleep(long, int) 方法过程中受阻,则其中断状态将被清除,它还将收到一个 InterruptedException。
  • 如果该线程在可中断的通道(java.nio.channels.InterruptibleChannel)上的 I/O 操作中受阻,则该通道将被关闭,该线程的中断状态将被设置并且该线程将收到一个 ClosedByInterruptException。
  • 如果该线程在一个 Selector (java.nio.channels.Selector) 中受阻,则该线程的中断状态将被设置,它将立即从选择操作返回,并可能带有一个非零值,就好像调用了选择器的 wakeup 方法一样。
  • 如果以前的条件都没有保存,则该线程的中断状态将被设置。
  • 中断一个不处于活动状态的线程不需要任何作用。 

检测中断

如何检测中断决定于线程所做的事情。

  • 如果线程调用可以抛出InterruptException的方法,则捕获InterruptException,然后在catch块中处理(通常是退出run方法以中断线程)
  • 如果调用其它方法,则可以在空闲时检查Thread.interrupted以判断是否收到中断信号,确认收到中断信号后进行处理。可以抛出一个InterruptException从而和前一种处理方法保持一致

中断状态

线程的中断机制是使用中断状态这一内部标志实现的。中断状态在调用线程的interrupt()方法时被设置(参考上面的interrupt方法说明)。

 

有两种方法可以取得线程的中断状态:

  • 调用静态方法Thread.interrupted(),该方法除了返回当前线程的中断状态外,还会清除当前线程的中断状态。换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)。
  • 调用指定线程的isInterrupted()方法,该方法只返回指定线程的中断状态而不影响该线程的中断状态。

有两种方法可以清除线程的中断状态:

  • 如上所述,调用Thread.interrupted()
  • 调用该线程的interrupt()方法引发InterruptedException的时候同时就已经清除了所在线程的中断状态,包括Object类的wait()、wait(long)或wait(long, int)方法,或者线程的 join()join(long)join(long, int)sleep(long)sleep(long, int) 方法
分享到:
评论

相关推荐

    09.多线程编程基础-停止线程-使用interrupt方法中断线程.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    Java多线程-多线程知识点总结和企业真题

    ### Java多线程知识点总结及企业真题解析 #### 一、知识点总结 ##### (1)多线程相关概念 1. **程序、进程和线程的区分**: - **程序**:为了完成特定的任务而编写的指令集合。它是静态的概念。 - **进程**:...

    java基础--11.多线程-1

    3. 线程中断:通过调用Thread类的interrupt()方法可以中断线程,线程可以通过检查isInterrupted()或interrupted()方法来响应中断请求。 四、线程状态 Java线程有五种基本状态:新建(New)、就绪(Runnable)、...

    Java的多线程-线程间的通信.doc

    在Java多线程编程中,线程间的通信是非常重要的概念,用于协调多个并发执行的任务。线程的状态转换是理解线程通信的基础,主要包括四个状态:新(New)、可执行(Runnable)、死亡(Dead)和停滞(Blocked)。新状态...

    深入分析JAVA 多线程--interrupt()和线程终止方式

    JAVA 多线程 interrupt() 和线程终止方式 JAVA 多线程中,interrupt() 和线程终止方式是两个非常重要的概念。本文将深入分析 JAVA 多线程中 interrupt() 和线程终止方式的相关知识。 一、interrupt() 介绍 ...

    java多线程的讲解和实战

    9. **线程中断**:`interrupt()`方法可以标记线程中断状态,线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求,从而优雅地停止线程执行。 10. **线程局部变量(ThreadLocal)**:为每个线程...

    JAVA-JavaThreadProgramming-Sams.zip_JAVA 设计_java 多线程_java 线程_多线程

    此外,yield()方法让当前线程暂停,给其他线程执行的机会,而interrupt()方法用于中断线程。 Java提供了多种同步机制来解决多线程环境下的数据安全问题,如synchronized关键字、 volatile变量、Lock接口(如...

    java多线程源码-source

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。接下来,我们将深入探讨这两个方法以及相关的...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    java 多线程并发实例

    Java的Thread类提供了start()来启动线程,interrupt()来中断线程,但需要注意的是,中断并不一定能立即停止线程,线程需要自行检查并响应中断状态。 另外,可能还会涉及到死锁、活锁和饥饿等并发问题,这些都是多...

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    4JAVA编程高级-多线程编程

    - `interrupt()`:中断线程。 - `isInterrupted()`:检查线程是否被中断。 **线程的优先级** Java中的线程具有优先级,这影响着线程的调度顺序。线程的优先级可以通过`setPriority()`方法设置,也可以通过`...

    Java多线程练习题

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,多线程的实现主要通过两种方式:继承Thread类和实现Runnable接口。理解并掌握多线程的使用对于任何Java开发者...

    JAVA-多线程 所有文件

    11. **线程中断**:通过`interrupt()`方法可以中断一个线程,但需要注意中断只是个标志,线程可能需要检查并响应中断。 12. **线程局部变量**:`ThreadLocal`类提供了线程局部变量,每个线程都有自己的副本,不会...

    java多线程详解(比较详细的阐述了多线程机制)

    Java多线程还涉及到线程中断和异常处理,Thread类提供了interrupt()方法发起中断请求,线程可以通过检查isInterrupted()或isInterrupted()状态响应中断。在多线程环境中,异常处理也需特别注意,合理的try-catch-...

    java线程1-10-720p版本

    最后,"10_一天学会线程_线程中断.mp4"可能深入介绍了`interrupt()`和`isInterrupted()`方法的使用,以及如何处理中断异常`InterruptedException`。线程中断是一种协作机制,当一个线程被中断时,其他线程可以通过...

    Java多线程技术精讲

    Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...

    基于Java的源码-超简单Java多线程填表源码.zip

    这个"基于Java的源码-超简单Java多线程填表源码.zip"文件很可能包含一个简单的示例,演示如何在Java中使用多线程来填充表格数据。下面我们将深入探讨Java多线程的基础知识及其在实际应用中的使用。 1. **线程基础**...

    Java多线程详解及示例

    Java多线程编程是提升程序性能和响应性的关键技术。理解多线程的概念,掌握线程的创建、同步、通信、死锁避免等核心知识点,以及合理使用线程池,对于编写高效、稳定的并发程序至关重要。通过实践,开发者可以更好地...

Global site tag (gtag.js) - Google Analytics