线程的interrupt()】的更多相关文章

一直以为执行了interrupt方法就可以让线程结束,并抛出InterruptedException. 今天看了Java并发编程实战的第七章发现并不是这么回事,在这章的开头就提到 要使任务和线程能安全.快速.可靠地停止下来,并不是一件容易的事.Java没有提供任何机制来安全地终止线程.但它提供了(Interruption),这是一种协作机制,能够使一个线程终止另一个线程的当前工作 如上提到的是协作,而不是强制.因为如果需要被中断的线程任务实现没有准守这样的协作约定,那么其他线程就没有办法通过in…
java现成的interrupt方法比较容易误导新手,它其实是不会中断(停止)当前的线程,只是标志一下当前线程的某个状态值(中断标志位),并且这个状态为只对阻塞方法(比如说:                        Thread.sleep(),Thread.wait()或者I/O等)起作用,对于非阻塞方法不起任何作用. 每个线程都会有一个中断标志位(且当作是interrupt status吧),这个状态位默认为false状态,即非中断状态.当一个线程执行一个阻塞方法的时候,阻塞方法内部会…
线程阻塞状态与等待状态(当一个线程处于被阻塞或等待状态时,它暂时不活动,不允许任何代码且消耗最少的资源) 当一个线程试图获得一个内部的对象锁(而不是java.util.concurrent库中的锁),而该锁被其他线程持有,则该线程进入阻塞状态 当一个线程等待另一个线程通知调度器的一个条件时,它自己进入等待状态.在调用Object.wait方法或Thread.join方法,或者是等待java.util.concurrent库中的Lock或Condition时,就会出现这种情况.实际上被阻塞状态与等…
本文章将要介绍的内容有以下几点,读者朋友也可先自行思考一下相关问题: 线程中断 interrupt 方法怎么理解,意思就是线程中断了吗?那当前线程还能继续执行吗? 判断线程是否中断的方法有几个,它们之间有什么区别? LockSupport的 park/unpark 和 wait/notify 有什么区别? sleep 方法是怎么响应中断的? park 方法又是怎么响应中断的? 线程中断相关方法 线程中和中断相关的方法有三个,分别介绍如下: 1) interrupt 我们一般都说这个方法是用来中断…
线程中断方法interrupt()方法的理解: interrupt()方法的源码: interrupted()方法的源码及注解: isInterrupted()方法源码及注解: 在了解这个方法之前我们需要了解何为中断(interrupt): 1.中断只是一种协作机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现: 2.每个线程对象中都有一个标识,用于表示线程是否被中断:该标识位为true表示中断,为false表示未中断: 3.通过调用线程对象的interrupt方法将该线程的…
前言 以前有一个错误的认识,以为中断操作都会抛出异常,后来才发现并不是这样,所以今天就来做一个关于中断的总结. 如何关闭线程 已被弃用的Stop方法 早期,Thread类中有一个stop方法,用于强行关闭一个线程.但是后来发现此操作并不安全,强行关闭可能导致一致性问题.故stop方法已被官方弃用.具体原因请看Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.. 既然,stop方法不能用了,我们就要另辟蹊径.而我们知…
程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的.难以发现的错误.在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程. 中断(Interrupt)一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其当前的操作.线程是死亡.还是等待新的任务或是继续运行至下一步,取决于这个程序.虽然初次看来它可能显得简单,但是,你必须进行一些预警以实现期望的结果.你最好还是牢记以下的几点告诫. 首先,忘掉Thread.st…
一个正常的线程中断: 从运行到真正的结束,应该有三个阶段: 正常运行. 处理结束前的工作,也就是准备结束. 结束退出. Java曾经提供过抢占式限制中断,但问题多多,例如的Thread.stop.另一方面,出于Java应用代码的健壮性的考虑,降低了编程门槛,减少不清楚底层机制的程序员无意破坏系统的概率,这个问题很多,比如: 当在一个线程对象上调用stop()方法时,这个线程对象所运行的线程就会立即停止,并抛出特殊的ThreadDeath()异常.这里的“立即”因为太“立即”了,   一个线程正在…
官网解释 If this thread is blocked in an invocation of the wait(), wait(long), or wait(long, int) methods of the Object class, or of the join(), join(long), join(long, int), sleep(long), or sleep(long, int), methods of this class, then its interrupt stat…
如下图所示,interrupt()方法并没有成功的中断我们的线程. 为了便于理解,其实可以这样来类比(注意,只是类比,实际情况并不完全是这样):Thread类中有一个boolean的标志域用来表示线程是否需要被中断,默认是false.interrupt()方法被调用之后,这个标志域就变成了true.当然,Thread类有一个interrupted()方法返回一个boolean值,返回的就是这个标志域的值.也就是说,其实interrupt()方法除了把这个标志域设定为true之后,其他什么也没干了…