首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Java 06 - interrupt

interrupt 原理 interrupt是Thread中的一个方法, 其本质是将线程中的中断标志设置为true, 而不是直接中断. 设置后, 根据线程的状态而有不同的后续操作....isInterrupted()) { // todo } } isInterrupted()可以返回中断标志位的值, 表示运行中的线程是否被Thread.Interrupt()调用...中断状态与InterruptedException 调用Interrupt方法后, 可以中断掉线程. 这里的中断是指: 线程变成”中断状态”....因为我们知道, 如果调用了interrput方法, 但是线程的状态并不是在join, wait, sleep的话, 并不会抛出InterruptedException, 而是将interrupt标志位设为...注意 处于wait态中的线程在被interrupt后, 会跳出wait set, 并在下次获得Object锁的时候, 才会抛出InterruptedException.

35830

线程中断方法详解interrupt

线程中断方法详解interrupt由于stop中断线程方法过于暴力,就像是突然你正在开发,突然停电一样于是衍生出中断方法interrupt简介线程中断并不会使线程立即退出,而是给线程发送一个通知,告知目标线程...至于目标线程接收到通知之后如何处理,则完全由目标线程自己决定Thread提供了3个与线程中断有关的方法,这3个方法容易混淆,大家注意下:public void interrupt() //中断线程public...} }; thread1.setName("thread1"); thread1.start(); TimeUnit.SECONDS.sleep(1); thread1.interrupt...();}调用interrupt()方法之后,线程的sleep方法将会抛出InterruptedException异常。...注意:sleep方法由于中断而抛出异常之后,线程的中断标志会被清除(置为false),所以在异常中需要执行this.interrupt()方法,将中断标志位置为true

11500

线程应用 - 中断interrupt详解

有些初学者对中断的概念可能会有些许小误会,比如线程调用Thread.interrupt()方法,就认为线程会被中断,停止执行,其实不是这样的,让我们来看下中断interrupt详解。...一、interrupt方法 源码如下: public void interrupt() { //判断是否操作线程 if (this !...= null) { //只是设置中断标记位 interrupt0(); // Just to set the interrupt flag...b.interrupt(this); return; } } interrupt0(); } 可以看到interrupt方法并不会对任务终止线程的操作...但是也不能说interrupt方法是完全没有任何作用的,因为interrupt方法对于java来说其实是一个协作机制,调用interrupt方法会把调用线程的中断状态设置为true,而其他需要依赖这个中断符的方法在运行时如果监测到这个中断标志就会作出响应

1.1K20

yield函数,stop函数 ,interrupt函数

不安全(线程A调用B的stop()时并不知道线程B的具体情况,这样可能导致线程B的清理工作无法完成或者导致B马上释放锁造成数据不同步) 通过调用suspend()和resume()方法 同样被废弃 调用interrupt...(),通知线程应该中断了,目前正常使用 interrupt() 调用interrupt(),通知线程应该中断了 ①如果线程处于被阻塞状态,那么线程将立即退出被阻塞状态,并抛出一个InterruptedException...interrupt()需要被调用的线程配合中断 ①在正常运行任务时,经常检查本线程的中断标志位,如果被设置了中断标志就自行停止线程。...关于interrupt的相关概念可以看看https://blog.csdn.net/zhuyong7/article/details/80852884

1.8K60

juc10-线程中断interrupt

interrupt 作用 1.对运行中的线程,仅设置了一个停止的标记,但程序照常运行。 2.对阻塞中的线程,该线程会抛出InterruptedException异常。...interrupt方法用于中断线程。调用该方法的线程的状态为将被置为"中断"状态。 interrupt方法只能打上一个停止标记(改变状态),不能终止一个正在运行的线程,还需要加入一个判断才停止线程。...interrupt方法的使用效果并不像 for+break 语句那样,马上就停止循环。 调用interrupt方法是在当前线程中打了一个停止标志,并不是真的停止线程。...三个主要API 1.interrupt() :中间当前线程,实际并不是马上执行; 2.interrupted(): 获取前线程的interrupt状态,关置重置interrupt状态为false,即未打...interrupt状态 ; 3.isInterrupted(): 获取前线程的interrupt状态,不重置; 看个小例子,子线程中断自己 /** * 主动中断线程 */ public class

13630
领券