`
天天向上1989
  • 浏览: 419298 次
  • 性别: Icon_minigender_2
  • 来自: 南京
社区版块
存档分类
最新评论

【转】java的interrupt机制

阅读更多

当外部线程对某线程调用了thread.interrupt()方法后,java语言的处理机制如下:


       如果该线程处在可中断状态下,(调用了xx.wait(),或者Selector.select(),Thread.sleep()等特定会发生阻塞的 api),那么该线程会立即被唤醒,同时会受到一个InterruptedException,同时,如果是阻塞在io上,对应的资源会被关闭。如果该线 程接下来不执行“Thread.interrupted()方法(不是interrupt),那么该线程处理任何io资源的时候,都会导致这些资源关闭。 当然,解决的办法就是调用一下interrupted(),不过这里需要程序员自行根据代码的逻辑来设定,根据自己的需求确认是否可以直接忽略该中断,还 是应该马上退出。

如果该线 程处在不可中断状态下,就是没有调用上述api,那么java只是设置一下该线程的interrupt状态,其他事情都不会发生,如果该线程之后会调用行 数阻塞API,那到时候线程会马会上跳出,并抛出InterruptedException,接下来的事情就跟第一种状况一致了。如果不会调用阻塞 API,那么这个线程就会一直执行下去。除非你就是要实现这样的线程,一般高性能的代码中肯定会有wait(),yield()之类出让cpu的函数,不 会发生后者的情况。

关于线程阻塞:

如果一个线程由于等待某些事件的发生而被阻塞,又该如何实现该线程的中断呢?比如当一个线程由于需要等候键盘输入而被阻塞,处于不可运行状态时,即使主程序中将该线程的共享变量设置为true,但该线程此时根本无法检查循环标志,当然也就无法立即中断。

其实,这种情况经常会发生,比如调用Thread.join()方法,或者Thread.sleep()方法,在网络中调用 ServerSocket.accept()方法,或者调用了DatagramSocket.receive()方法时,都有可能导致线程阻塞。即便这 样,仍然不要使用stop()方法,而是使用Thread提供的interrupt()方法,因为该方法虽然不会中断一个正在运行的线程,但是它可以使一 个被阻塞的线程抛出一个中断异常,从而使线程提前结束阻塞状态,退出堵塞代码。




分享到:
评论

相关推荐

    Java interrupt()方法使用注意_动力节点Java学院整理

    总结来说,Java的`interrupt()`方法是一个协作中断机制,它依赖于线程的自我检查和响应。正确使用`interrupt()`需要在被中断的线程中周期性地检查中断状态,并在适当的时候结束任务。通过结合使用`interrupt()`和`...

    java线程机制介绍

    Java线程机制是Java编程语言中的一个重要特性,它使得开发者能够在单个应用程序中同时执行多个任务,从而提高程序的效率和响应性。Java通过内置的线程支持使得多线程编程变得相对简单,与C++等其他语言相比,Java...

    Java中interrupt的使用.docx

    总的来说,Java的中断机制提供了一种安全且灵活的方式来停止线程,通过结合使用`interrupt()`, `isInterrupted()`, 和 `interrupted()`方法,以及妥善处理`InterruptedException`,可以确保线程在适当的时候优雅地...

    Java如何使用interrupt()终止线程

    在Java中,终止线程是一种复杂的操作,需要对线程的状态和中断机制有深入的了解。本文将详细介绍如何使用interrupt()终止线程,并提供了多种终止线程的方式和示例代码。 一、interrupt()的作用和使用 interrupt()...

    [Java基础]猜测Java的interrupt和sleep做了什么

    在Java编程语言中,`interrupt()` 和 `sleep()` 是两个非常关键的方法,它们与线程的控制和管理密切相关。理解这两个方法的工作原理是构建多线程应用程序的基础。 首先,我们来探讨 `interrupt()` 方法。在Java中,...

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

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

    浅谈Java线程Thread之interrupt中断解析

    在Java中,interrupt机制的实现主要通过三个方法来实现: 1. Thread.interrupt():设置当前中断标记为true,类似属性的set方法。 2. Thread.isInterrupted():检测当前的中断标记,类似属性的get方法。 3. Thread....

    Java多线程机制(示例)

    ### Java多线程机制详解与示例 #### 一、Java多线程机制概述 Java中的多线程机制是程序设计中的一个重要概念,它允许在同一个应用程序中并发执行多个线程,有效地提高了程序的执行效率和响应速度。通过Java语言...

    java线程中断之interrupt和stop.docx

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

    JavaThread中断机制共11页.pdf.zip

    Java线程中断机制是Java多线程编程中的一个重要概念,它允许程序在执行过程中通过某种方式通知线程停止其当前的活动,以便进行资源释放或流程控制。在Java中,线程中断主要通过`Thread.interrupt()`方法实现,这个...

    Java多线程之中断线程(Interrupt)的使用详解

    Java中的多线程允许并发执行多个任务,而中断机制是Java提供的一种优雅地停止线程执行的方式。`Thread.interrupt()`方法是中断线程的主要手段,但它的行为并不像字面意义上那样直接终止线程。相反,它通过设置线程的...

    5-2_Java底层开发技术(Java高级).pdf

    Java 提供了多种线程操作方法,例如 wait() 方法使线程等待,notify() 方法唤醒等待线程,interrupt() 方法中断线程等。 同步与死锁是多线程中需要注意的两个问题。同步是指多个线程同时访问共享资源时,需要使用锁...

    基于JDK8总结java中的interrupt

    在Java中,interrupt机制是一种重要的线程控制机制,它允许一个线程请求另一个线程停止或中断当前操作。基于JDK8,我们可以总结出以下关于java中的interrupt知识点: 1. interrupt方法调用后,针对BLOCKED状态的...

    Java多线程同步机制在售票系统的实现

    3. **流程控制**:Java提供了多种线程控制方法,如`sleep()`、`interrupt()`、`wait()`、`notify()`等,用于控制线程的行为。 4. **临界区**:临界区是指程序中可能被多个线程同时访问的关键代码区域,需要通过同步...

    Java线程超时监控

    此外,对于长时间运行的任务,可以考虑采用中断机制,使任务能够定期检查是否被中断,以便于在超时后能够及时清理资源并终止执行。 总之,Java提供了多种方法来监控和管理线程的超时,包括使用`Future`、`...

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

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

    java 并发编程的艺术pdf清晰完整版 源码

    Java语言提供了丰富的并发工具和API,如线程、守护线程、线程池、同步机制(synchronized、wait/notify)、并发集合(ConcurrentHashMap、CopyOnWriteArrayList等)以及并发框架(ExecutorService、Future、Callable...

    java多线程Demo

    在多线程环境下,可能会出现数据竞争问题,为了解决这个问题,Java提供了多种同步机制,如synchronized关键字、wait/notify机制、Lock锁(ReentrantLock)等。synchronized用于控制对共享资源的访问,而wait/notify...

Global site tag (gtag.js) - Google Analytics