线程的中断分为哪些情况?
相信大家在使用电脑的时候都有过这样的现象,就是在运行一个程序的时候,突然发现不需要了或者是需要启用其他软件的时候,我们会强制关闭这个软件的启动过程,昌平java培训认为这个行为在java编程开发中就叫做线程的中断。
每一个线程都有一个boolean类型标志,用来表明当前线程是否请求中断,当一个线程调用interrupt()方法时,线程的中断标志将被设置为true。
我们可以通过调用Thread.currentThread().isInterrupted()或者Thread.interrupted()来检测线程的中断标志是否被置位。这两个方法的区别是
Thread.currentThread().isInterrupted()是线程对象的方法,调用它后不清除线程中断标志位;而Thread.interrupted()是一个静态方法,调用它会清除
线程中断标志位。
一般来说中断线程分为三种情况:
(一):中断非阻塞线程
(二):中断阻塞线程
(三):不可中断线程
(一):中断非阻塞线程
中断非阻塞线程通常有两种方式:
(1)采用线程共享变量
这种方式比较简单可行,需要注意的一点是共享变量必须设置为volatile,这样才能保证修改后其他线程立即可见。
(2)采用中断机制
(二):中断阻塞线程
当线程调用Thread.sleep()、Thread.join()、object.wait()再或者调用阻塞的i/o操作方法时,都会使得当前线程进入阻塞状态。那么此时如果在线程处于阻塞状态是调用
interrupt()方法设置线程中断标志位时会出现什么情况呢!此时处于阻塞状态的线程会抛出一个异常,并且会清除线程中断标志位(设置为false)。这样一来线程就能退出
阻塞状态。当然抛出异常的方法就是造成线程处于阻塞状态的Thread.sleep()、Thread.join()、object.wait()这些方法。
需要注意的地方就是Thread.sleep()、Thread.join()、object.wait()这些方法,会检测线程中断标志位,如果发现中断标志位为true则抛出异常并且将中断标志位设置为false。
所以while循环之后每次调用阻塞方法后都要在捕获异常之后,调用Thread.currentThread().interrupt()重置状态标志位。
(三):不可中断线程
有一种情况是线程不能被中断的,就是调用synchronized关键字和reentrantLock.lock()获取锁的过程。
但是如果调用带超时的tryLock方法reentrantLock.tryLock(longtimeout,TimeUnitunit),那么如果线程在等待时被中断,将抛出一个InterruptedException异常,这是一个非常
有用的特性,因为它允许程序打破死锁。你也可以调用reentrantLock.lockInterruptibly()方法,它就相当于一个超时设为无限的tryLock方法。
8051单片机中断源通常分为几类?
8051单片机中断源通常分为三类,分别是:外部中断、定时中断和串行口中断。其中,外部中断和定时器中断可以自动清除,串行口中断不能自动清除。1、对于外部中断,CPU响应中断后,中断请求是自动撤除的,无需采取其他措施;2、对于定时器,CPU响应中断后,中断请求也是自动撤除的,无需采取其他措施;3、对于...
中断的源分类
一台处理机可能有很多中断源,但按其性质和处理方法,大致可分为如下五类。① 机器故障中断。② 程序性中断。现行程序本身的异常事件引起的,可分为以下三种:一是程序性错误,例如指令或操作数的地址边界错,非法操作码和除数为零等;二是产生特殊的运算结果,例如定点溢出;三是程序出现某些预先确定要...
1、什么是中断?什么是中断服务程序?什么是中断源?
(3)网卡和鼠标:此问题一般发生在鼠标在COM1口,使用中断为3,这时要注意通常网卡的默认中断为3,两者极有可能发成冲突。(4)打印机和EPP扫描仪:在安装扫描仪驱动程序时应将打印机打开,因为两个设备中串联,所以为了防止以后扫描仪驱动程序设置有误,一定要将打印机打开再安装扫描仪驱动程序。(5)操作...
什么是中断?简述中断处理过程
中断就是执行中断服务程序,这是中断系统的核心。不同计算机系统的中断处理过程各具特色,但对多数计算机而言,其中中断服务程序的流程如下。 中断处理过程基本上由3部分组成,第一部分为准备部分,其基本功能是保护现场,对于非向量中断方式则需要确定中断源,最后开放中断,允许更高级的中断请求打断低级的...
一次中断处理过程的五个阶段
CPU首先响应优先级别最高的中断源。当中断处理完毕,再响应级别低的中断申请。中断排队可以采用硬件的方法,也可以采用软件的方法。前者速度快,但需要增加硬设备;后者无需增加硬设备,但速度慢,特别是中断源很多时尤为突出。软件优用查询技术:当CPU响应中断后,就用软件查询以确定是哪些外设申请中断,并...
51单片机的五个中断分别在什么时候(什么情况)执行里面的程序!
外部中断1 :P3.3口有低电平(IT1=0)\/ 下降沿(IT1=1)。定时器0中断:当定时器0计数到FFFF溢出时 定时器1中断:当定时器1计数到FFFF溢出时 串口中断:串口接收到一帧。或发送完一帧数据都会产生中断。你网上找一下TCON和SCON。什么条件让中断标志位的值改变。 那么就会进入中断服务程序去。
常见的中断源有哪些
中断是指由于某种事件的发生(硬件或者软件的),计算机暂停执行当前的程序,转而执行另一程序,以处理发生的事件,处理完毕后又返回原程序继续作业的过程。中断是处理器一种工作状态的描述。 我们把引起中断的原因,或者能够发出中断请求信号的来源统称为中断源 8086的中断源可以分为内部中断(即软件中断)和外部中断(即硬件...
完整的中断处理过程分为那几个阶段?
1)中断响应的事前准备:系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。系统只有事前对这两件事都知道得很清楚,才能正确地响应各种中断信号和异常。2) CPU检查是否有中断\/异常信号 CPU在执行完当前程序的每一条指令...
中断优先级的顺序为
中断优先级在硬件设计中是固定的,不同的系统对优先级的划分是不同的。一般来说,优先级从高到低的顺序是:硬件故障中断、访问中断、程序中断、外部中断、输入输出中断。一般来说,中断设备以预定的顺序响应同时发生的中断事件。这种预先确定的顺序被称为中断的优先级。中断设备首先响应高优先级的中断事件...
8086系统中、中断类型码、中断向量、中断向量表的关系
①硬件中断 :即通过外部的硬件产生的中断,如打印机、键盘等,有时也称为外部中断。硬件中断又可分为两类:可屏蔽中断和不可屏蔽中断。不可屏蔽中断 :由 NMI 引脚引入,它不受中断允许标志的影响,每个系统中仅允许有一个,都是用来处理紧急情况的,如掉电处理。这种中断一旦发生,系统会立即响应;...
皮蚂易贝: 1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止.2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果).3. 使用interrupt方法中断线程. 1. 使用退出标志终...
阿荣旗13076951692: Qt学习之如何启动和终止一个线程 - ?
皮蚂易贝: 终止线程的三种方法:1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止. 2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果).3. 使用interrupt方法中断线...
阿荣旗13076951692: java 中如何使线程运行一定时间后停止? - ?
皮蚂易贝: java中使线程运行一定时间后停止,可以设置一个变量,当满足条件则退出线程:import static java.lang.Thread.currentThread; import java.util.concurrent.TimeUnit; public class ThreadPauseDemo{ public static void main(String args[]) throws ...
阿荣旗13076951692: 线程的中断状态被置位是什么意思 - ?
皮蚂易贝: 线程包括新建,运行,中断和死亡四种状态.呵呵
阿荣旗13076951692: 子线程的启动和停止 方法 - ?
皮蚂易贝: 启动 Thread t=new Thread(); t.start() 停止分很多种,有休眠,中断,礼让,t.sleep(); t.interrupted() t.yield()
阿荣旗13076951692: 如何中断Android线程 - ?
皮蚂易贝: 可以用interrupt()方法中断线程,而线程是否已经中断则用Thread.currentThread().isInterrupted()方法返回true/false判断:1、线程start()后马上调用interrupt(),在进入run()时中断标志已经被set on;2、在处理sleep()可能抛出的...
阿荣旗13076951692: 如何看android 线程调度 - ?
皮蚂易贝: 线程调度计算机通常只有一个CPU,在任意时刻只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行指令.所谓多线程的并发运行,其实是指从宏观上看,各个线程轮流获得CPU的使用权,分别执行各自的任务.在运行池中,会有...
阿荣旗13076951692: 线程的阻塞 中断 挂起 休眠 的区别 - ?
皮蚂易贝: LZ,你这个问题我也关注蛮久了, 因为我一直不知道线程还有这么多状态的,线程主要状态不是只有:创建-》就绪-》运行->阻塞-》终止 吗?我是用java的,介绍下java的Thread的方法 1. sleep()方法:sleep()允许指定以毫秒为单位的一段...
阿荣旗13076951692: interrupted和isInterrupted的区别 - ?
皮蚂易贝: interrupt方法用于中断线程. 是用来设置中断状态的. 返回true说明中断状态被设置了而不是被清除了. 调用该方法的线程的状态将被置为"中断"状态. interrupted 是静态方法,作用于当前线程,返回的是当前线程的中断状态. 例如,如果...