网易-java线程的interrupt】的更多相关文章

java现成的interrupt方法比较容易误导新手,它其实是不会中断(停止)当前的线程,只是标志一下当前线程的某个状态值(中断标志位),并且这个状态为只对阻塞方法(比如说:                        Thread.sleep(),Thread.wait()或者I/O等)起作用,对于非阻塞方法不起任何作用. 每个线程都会有一个中断标志位(且当作是interrupt status吧),这个状态位默认为false状态,即非中断状态.当一个线程执行一个阻塞方法的时候,阻塞方法内部会…
程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的.难以发现的错误.在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程. 中断(Interrupt)一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其当前的操作.线程是死亡.还是等待新的任务或是继续运行至下一步,取决于这个程序.虽然初次看来它可能显得简单,但是,你必须进行一些预警以实现期望的结果.你最好还是牢记以下的几点告诫. 首先,忘掉Thread.st…
一个正常的线程中断: 从运行到真正的结束,应该有三个阶段: 正常运行. 处理结束前的工作,也就是准备结束. 结束退出. Java曾经提供过抢占式限制中断,但问题多多,例如的Thread.stop.另一方面,出于Java应用代码的健壮性的考虑,降低了编程门槛,减少不清楚底层机制的程序员无意破坏系统的概率,这个问题很多,比如: 当在一个线程对象上调用stop()方法时,这个线程对象所运行的线程就会立即停止,并抛出特殊的ThreadDeath()异常.这里的“立即”因为太“立即”了,   一个线程正在…
java线程中的sleep/wait/notify/yield/interrupt方法 sleep 该方法能够使当前线程休眠一段时间 休眠期间,不释放锁 休眠时间结束之后,进入可执行状态,加入到线程就绪队列中,并不会立即执行 调用的时候,必须捕获异常 来自Thread的静态方法,只作用于当前线程 单位毫秒 wait 该方法能干是当前线程休眠一段时间 休眠期间,释放锁 休眠时间结束之后,立即执行 调用的时候无需捕获异常 来自Object类的方法,一旦调用 单位毫秒 调用wait()方法进入休眠之后…
概念: 操作系统可以有多个进程,一个线程可以有一个或多个线程.进程与进程之间不共享内存,都在各自的空间中运行.而线程不仅可以共享内存,还可以用有一个自己的内存空间,叫做线程栈. 线程又称轻量级进程.Java的线程是靠CPU时间片的快速切换实现的,并不是真正的同时进行.每个线程有独立的线程栈和程序计数器.线程在自己的栈中存储变量,使数据互不干扰,对于共同资源,容易引发并发问题,需要同步处理. 创建线程常用的两种方式: 1.继承Thread类,重写run() 2.实现Runnable接口 线程生命周…
前言 在分析interrupt之前,应该先了解java里线程有5种状态,其中有一个阻塞状态,interrupt和阻塞有关. interrupt() 方法 作用于要中断的那个线程. interrupt() 方法只是改变中断状态而已,它不会中断一个正在运行的线程. 这一方法实际完成的是,给受阻塞的线程发出一个中断信号,这样受阻线程就得以退出阻塞的状态. 更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,此时调用该线程的interrupt…
Java多线程系列--“基础篇”08之 join() 概要 本章,会对Thread中join()方法进行介绍.涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_40)3. join()示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479275.html 1. join()介绍 join() 定义在Thread.java中.join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行.这句话可能有…
Java中的线程状态(详见Java线程状态及转换-MarchOn): wait:Object类的实例方法,释放CPU执行权,进入等待状态,直到  被中断.被拥有该对象锁的线程唤醒(notify或notifyAll).wait时间到了自己唤醒 三者之一发生.会释放所持有的对象锁.(关于 wait.notiy.notifyAll的配合原理见后面) 示例:wait()和notify()因为会对对象的“锁标志”进行操作,所以它们必须在获得对象锁后执行即在 synchronized函数或synchroni…
在java的线程Thread类中有三个方法,比较容易混淆,在这里解释一下 (1)interrupt:置线程的中断状态 (2)isInterrupt:线程是否中断 (3)interrupted:返回线程的上次的中断状态,并清除中断状态 举个例子: 用法: class MyThread extends Thread { ...... ...... public void run() { try { while(!Thread.currentThread().isInterrupted()) { //…
一直以为执行了interrupt方法就可以让线程结束,并抛出InterruptedException. 今天看了Java并发编程实战的第七章发现并不是这么回事,在这章的开头就提到 要使任务和线程能安全.快速.可靠地停止下来,并不是一件容易的事.Java没有提供任何机制来安全地终止线程.但它提供了(Interruption),这是一种协作机制,能够使一个线程终止另一个线程的当前工作 如上提到的是协作,而不是强制.因为如果需要被中断的线程任务实现没有准守这样的协作约定,那么其他线程就没有办法通过in…