线程 interrupted 详细解析

目录

1.为什么这个方法值得我写个文章。?

2.先看下例子

3. 研究下 下面3个方法的jvm层面实现 跟用法

3.1)thread.isInterrupted()

3.2)thread.interrupt();

3.3)Thread.interrupted()

4.最后代码验证下


1.为什么这个方法值得我写个文章。?

        因为这个方法跟我们的字面意思不太一样。。。。我们想当然的以为 这个就是打断线程。。实际上不是

2.先看下例子

package com.imooc.controller.jdk;

import io.netty.channel.Channel;
import lombok.SneakyThrows;
import sun.misc.Unsafe;

import java.util.concurrent.TimeUnit;

/**
 * @description:
 * @author: yk
 * @time: 2022/5/27 9:12
 */
public class a {
        @SneakyThrows
        public static void main(String[] args) {
            Thread thread = Thread.currentThread();
            Thread sub = new Thread(() -> {
                System.out.println("main...........111...."+thread.isInterrupted());
                thread.interrupt();
//                System.out.println("main...........2222...."+thread.isInterrupted());
//                System.out.println("main...........2222...."+thread.isInterrupted());

            });
            sub.start();
            for(;;){
                System.out.println("main going..........");
            }
//            Unsafe unsafe =SafeUtil.getUnsafe();
//            unsafe.park(false,0);
//            System.out.println("main..............");
//            System.out.println("main...........33333...."+Thread.interrupted());
//            System.out.println("main...........33333...."+Thread.interrupted());
        }
}

结果:main线程并没有被打断,而是疯狂的打印信息。。。。跟我们想的完全不一样

3. 研究下 下面3个方法的jvm层面实现 跟用法

3.1)thread.isInterrupted()

Thread.c 中找到对应的方法,---》

 

 jvm.cpp中找到对应的方法

 thread.cpp 中查看

最后到  os_linux.cpp中查看

 可以看出 就是去获取标记位的,如果被打断就返回true 否则返回false

3.2)thread.interrupt();

public void interrupt() {
        if (this != currentThread()) {
            this.checkAccess();
        }

        synchronized(this.blockerLock) {
            Interruptible var2 = this.blocker;
            if (var2 != null) {
                this.interrupt0();
                var2.interrupt(this);
                return;
            }
        }

        this.interrupt0();
    }

打断的方法,我们来具体看看实现

同上类似的找法,我们到os_linux.cpp中看到对应的方法

 可以看出,1.设置标记位 true,表示被打断的  2.唤醒park的线程,比如sleep, synchronized,unsafe 等操作导致的线程挂起操作。(可以看出 interrupt 实际上是唤醒的意思。。是不是跟我们想当然的不一样)

3.3)Thread.interrupted()

这个方法是获取当前的线程 是否被打断的状态。(注意此处 传值 true,而 thread.isInterrupted() 传值是false)

 thread.isInterrupted()

 那这个boolean 什么意思呢?我们到jvm中看看

 也就是说  

thread.isInterrupted() 这个传值false,不会清除标记位的值  
Thread.interrupted() 这个传值true,会清除标记位的值

4.最后代码验证下

 结果完全符合逾期。。。。

线程细讲-3:轻松理解interrupt(),interrupted(),isInterrupted()方法的作用
m0_72467092的博客
11-05 1160
说到线程的中断,一定离不开三个 方法 interrupt() , interrupted() , isInterrupted() , 本文从源代码入手就能很好地理解这三个方法
java 线程 interrupted_java线程之中断线程Interrupted用法
weixin_34216614的博客
02-16 1794
中断线程-interrupt()一个正在运行的线程除了正常的时间片中断之外,能否被其他线程控制?或者说其他线程能否让指定线程放弃CPU或者提前结束运行? 除了线程同步机制之外,还有两种方法:(1) Thread.stop(), Thread.suspend(), Thread.resume() 和Runtime.runFinalizersOnExit() 这些终止线程运行的方法 。这些方法已经被废...
【面试题】线程interrupted
yzx3105的博客
03-11 225
1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。 3. 阻塞(BLOCKED):表示线程阻塞于锁。 4. 等.
线程interrupt
weixin_41029286的博客
07-31 153
InterruptedException异常: 声明了抛出InterruptedException异常的方法(轻量级阻塞的方法),线程在阻塞时,其他线程(比如主线程)调用这个线程interrupt()方法,阻塞线程会抛出InterruptedException异常并从阻塞状态中跳出。 声明了InterruptedException的方法有 public static native void sleep(long millis) throws InterruptedException{//...} publ
线程 interrupted
fangchao3652
12-19 493
1.多线程调用interrupt 会立即给当前线程打上一个已经停止的标志 ,但该线程大部分还能执行下去 我们有两种方法得到这个停止标志,然后在for循环中 if()手动判断该标志并且手动退出循环即可(判断后若后面还有for循环,还是会执行这个线程,所以在if里面再抛出一个 InterruptedException,(return也可以 ,不过还是建议exception ,catch之后还可以继续往...
Java线程的相关方法详细解析
09-05
下面将对Java线程的主要方法进行详细解析: 1. **start()** - 这个方法是启动线程的关键,当你创建了一个`Thread`对象后,必须调用`start()`方法来启动它。这个方法会调用线程的`run()`方法,但区别在于`start()`会...
Java线程中断机制:stop、interrupted与isInterrupted解析
"Java线程中断机制涉及的方法stop()、interrupted()和isInterrupted(),以及它们的使用和安全性分析。" 在Java线程编程中,中断机制是控制线程执行的一种重要手段。这里我们将深入探讨stop()、interrupted()和...
Java线程的用法详细介绍
08-29
本文将详细讲解Java中实现多线程的两种方式以及线程的生命周期。 1. 创建线程 Java中创建线程主要有两种方式: **方式一:继承Thread类** 当你创建一个新的类继承自Thread类时,你需要重写run()方法。然后通过...
浅谈Java线程Thread之interrupt中断解析
08-28
Java线程Thread之interrupt中断解析 Java线程Thread之interrupt中断机制是Java线程编程中的一种重要机制。通过调用Thread.interrupt()方法,可以设置线程的中断状态位,线程会不时地检测这个中断标示位,以判断...
Java Thread多线程详解及用法解析
09-01
- **interrupted()**:检查当前线程是否被中断,如果中断则清除中断标志。 3. 线程同步与协作 为了防止多个线程同时访问共享资源,Java提供了多种同步机制: - **synchronized** 关键字:用于修饰方法或代码块,...
interrupted()方法和线程停止
SUN_Blaze的博客
10-30 1253
今晚研究了一下多线程方面的书,有点心得,记录下来。 先来看一下interrupted()方法:判断当前线程是否为中断状态,执行后将状态标志清除为false。下面直接看代码:
线程中断机制 interrupt、isInterruptedinterrupted方法
m0_71149992的博客
06-28 1951
①. 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,所以,Thread.stop、Thread.suspend、Thread. resume都已经被废弃了②. 在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的机制 — 中断③. 中断只是一种协作机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现④. 若要中断一个线程,你需要手动调用该线程interrupt方法,该方法也仅仅是将线程对象的中
Thread.interrupted、Thread.isInterrupted、Thread.interrupt
Pelb的博客
12-22 1256
interrupt() 调用线程interrupt方法,并不能真正中断线程,只是给线程做了中断状态的标志 在一个线程中调用另一个线程interrupt()方法,即会向那个线程发出信号——线程中断状态已被设置。至于那个线程何去何从,由具体的代码实现决定。 常见现象:“当调用interrupt方法时,调用对象的线程就会抛出InterruptedException异常”,如果检查线程中断状态...
Thread类中interrupt()、interrupted()和isInterrupted()方法详解
热门推荐
qq_39682377的博客
08-06 11万+
首先看看官方说明: interrupt()方法 其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行。   interrupted()方法 作用是测试当前线程是否被中断(检查中断标志),返回一个boolean并清除中断状态,第二次再调用时中断状态已经被清除,将返回一个false。   ...
线程中断 interrupt
libufan的博客
04-29 2578
Java的中断是一种协作机制。也就是说调用线程对象的interrupt方法并不一定就中断了正在运行的线程,它只是要求线程自己在合适的时机中断自己。每个线程都有一个boolean的中断状态(这个状态不在Thread的属性上),interrupt方法仅仅只是将该状态置为true。 比如对正常运行的线程调用interrupt()并不能终止他,只是改变了interrupt标示符。 interrupt() 它基于「一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。」思想,是一个比较温柔的...
线程中断 interrupted()、interrupt()、isInterrupted()方法用法及详解
qq_45328505的博客
05-25 1220
一、设置标志位 缺点:当try catch中sleep()较长时间时,不能及时中断。 本应该在3秒之后就及时中断,但在程序处于阻塞状态,没有中断 class StopThreadTest1 { private volatile static boolean IS_STOP; public static void main(String[] args) throws InterruptedException { new Thread(()->{
线程Interrupted
ReadyYes的专栏
08-21 808
线程调用t.interrupt();方法并不是让线程
java线程中断[interrupt()函数]
iteye_19360的博客
03-16 206
一个正常的线程中断: 从运行到真正的结束,应该有三个阶段: 正常运行. 处理结束前的工作,也就是准备结束. 结束退出. Java曾经提供过抢占式限制中断,但问题多多,例如的Thread.stop。另一方面,出于Java应用代码的健壮性的考虑,降低了编程门槛,减少不清楚底层机制的程序员无意破坏系统的概率,这个问题很多,比如:   当在一个线程对象上调用stop()方法时,这个...
java线程中的interrupt,isInterrupt,interrupted方法
给力生活,天天向上!
02-11 230
java线程Thread类中有三个方法,比较容易混淆,在这里解释一下(1)interrupt:置线程的中断状态(2)isInterrupt线程是否中断(3)interrupted:返回线程的上次的中断状态,并清除中断状态举个例子: class MyThread extends Thread {       ......       ......       public voi...
写文章

热门文章

  • 三大队列cxq,entrylist,waitset 个人理解分析 6861
  • java 协程,线程直接的区别,实际测试两者间效率 3757
  • jvm源码debug native方法,并手写自定义线程,实现对java侧run方法回调 2819
  • 线程thread 中join方法解读 1627
  • 进程,线程,协程概念和区别 1303

分类专栏

  • 微信小程序实战
  • jdk源码分析-源码环境搭建(第一阶段) 16篇

最新评论

  • java 协程,线程直接的区别,实际测试两者间效率

    BillDavidup: 线程放线程池里对比下吧

  • java main 源码分析流程,老鸟你会了吗?全网最详细

    猫猫大神: 牛皮的一批

大家在看

  • 论文 Python 实现WOA-CNN-BiGRU-Attention数据分类预测 64
  • 手环押金原路退回系统——足浴店——东方仙盟

最新文章

  • volatile 为什么保障了可见性 不能保障多线程安全,不结合storebuffer 讲解都是耍流氓
  • 线程池详细步骤解析
  • threadlocal 解析
2023年1篇
2022年15篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫大神

有帮助的话,请打赏官人一下哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢小男孩造型雕塑温州户内玻璃钢雕塑哪家便宜石膏雕塑好还是玻璃钢雕塑好玻璃钢卡通雕塑厂商来宾玻璃钢卡通人物雕塑定做福建玻璃钢卡通动漫雕塑玻璃钢雕塑制品工厂福建大型商场创意商业美陈经验热门玻璃钢花盆花器云南园林景观玻璃钢彩绘雕塑三明模压法玻璃钢雕塑定制河南泡沫玻璃钢人物雕塑定制广东户外商场美陈报价台州玻璃钢卡通雕塑定制楚雄玻璃钢景观雕塑黄包车玻璃钢雕塑平舆玻璃钢雕塑枣庄市玻璃钢雕塑江西街道玻璃钢花盆大型商场美陈现价美陈装饰对于商场的意义春节商场美陈铜仁商场美陈施工玻璃钢雕塑供应诚信企业南京玻璃钢雕塑供应厂家价格玻璃钢欧式女神雕塑价格季节性商场美陈广东高质量玻璃钢雕塑图片四川季节性商场美陈供货商长沙玻璃钢卡通雕塑定做厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化