【多线程】Thread的interrupt()

news2024/9/27 5:41:48

一、前言

    如果子线程执行完毕终止状态,主线程再去调用interrupt()有什么效果?如果子线程还在执行过程中,主线程调用interrupt()有什么结果?

二、模拟实验

1、模拟子线程执行完毕再调用interrupt()

​
public class Test {
    
    public static void main(String[] args) throws InterruptedException {
        test2();
    }

    private static void test2() throws InterruptedException {
        Thread thread = new Thread(() -> {
            try {
                log.info("1前{}", Thread.currentThread().getName());
                // 导致当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,这取决于系统计时器和调度器
                // 的准确与精密。线程不会丢失任何监视器的所有权。
                Thread.sleep(2000);
                log.info("1后{}", Thread.currentThread().getName());
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        log.info("2前{}", Thread.currentThread().getName());
        thread.start();
        log.info("2后{}", Thread.currentThread().getName());
        // 1子线程2000主3000则子线程执行完毕再中断正常false,2子线程2000主1000中断子线程响应异常true
        Thread.sleep(3000);
        log.info("3后{}", Thread.currentThread().getName());
        log.info("interrupted........................");
        thread.interrupt();
        log.info("中断标志{}", thread.isInterrupted());
    }
}

​

运行结果:

 可见:

  1. 主线程调用start()启动子线程,主线程睡眠3秒
  2. 子线程获取到CPU调度资源,开始执行打印日志,然后睡眠2秒(在这过程中主线程依然睡眠),2秒过后子线程醒来继续执行打印日志,执行完毕那么按照线程的生命周期子线程的状态就是终止状态了。(它是不会往下执行的,作用域?)
  3. 3秒后主线程醒来,打算中断子线程,但是打印中断标志为false。那么子线程执行完毕终止状态,再去(调用interrupt())中断它是无法完成的,isInterrupted()返回false

2、模拟子线程未执行完毕就调用interrupt()

​
​
public class Test {
    
    public static void main(String[] args) throws InterruptedException {
        test2();
    }

    private static void test2() throws InterruptedException {
        Thread thread = new Thread(() -> {
            try {
                log.info("1前{}", Thread.currentThread().getName());
                // 导致当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,这取决于系统计时器和调度器
                // 的准确与精密。线程不会丢失任何监视器的所有权。
                Thread.sleep(2000);
                log.info("1后{}", Thread.currentThread().getName());
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        log.info("2前{}", Thread.currentThread().getName());
        thread.start();
        log.info("2后{}", Thread.currentThread().getName());
        // 1子线程2000主3000则子线程执行完毕再中断正常false,2子线程2000主1000中断子线程响应异常true
        Thread.sleep(1000);
        log.info("3后{}", Thread.currentThread().getName());
        log.info("interrupted........................");
        thread.interrupt();
        log.info("中断标志{}", thread.isInterrupted());
    }
}
​

​

运行结果:

可见:

  1.  主线程调用start()启动子线程,主线程睡眠1
  2. 子线程获取到CPU调度资源,开始执行打印日志,然后睡眠2秒(在这过程中主线程醒来了)
  3. 主线程醒来打印日志,调用thread.interrupt()中断子线程,thread.isInterrupted()返回true
  4. 子线程响应中断,抛出中断异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/31619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年天津美术学院专升本报名考试须知

天津美术学院2023年高职升本科报考须知(一)专业考试1.报名方法: ①网上报名及缴费: 我校采取网上报名的方式,考生于2022年12月份(具体时间关注公众号“高职接本科”另行公告)(10:00-22:00)登录网站(网址&am…

web前端期末大作业 html+css学生心理 7页主题网页设计

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 家 | HTML期末大学生网页设计作业 HTML:结构 CSS:样式 在操作方面上运用了html5和css3, 采用了divcss结构、表单、…

Oculus Deeplink

DeepLink 初始化 platform sdk 后设置 应用启动回调判断应用打开的方式发起应用跳转 接收应用跳转 GroupPresence 本文档基于 GroupPresenceSample 脚本逻辑编写,展示通过群组状态发起用户邀请,以及响应对应回调。参考 Oculus 工程 SharedSpaces 使…

【安装教程】vscode安装教程(超详细)

Visual Studio Code(简称 VSCode)是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和 Git版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也可以…

想裁剪视频时长,用电脑怎么裁剪视频时长

大家有没有碰到过这种一种情况,就是我们在社交平台上发布视频时,会因为视频时长过长这个问题而导致视频发布失败。那我们要怎么处理这个问题呢?其实我们可以使用一些剪辑软件,将视频裁剪,只截取视频里面较为精彩的部分…

hadoop集群安装(三):创建同步工具并安装jdk

文章目录说明分享环境创建同步工具编写脚本设置为系统命令安装jdk总结说明 搭建好集群虚拟机,新建同步工具并安装jdk,同步工具方便管理集群,某些操作和一条命令,同步所有节点,增加集群操作效率。 分享 大数据博客列表…

组件之间通过bus中央事件总线进行通信

案例完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widt…

66. SAP ABAP Function Module 的动态调用方式使用方式介绍

在本教程前面的步骤 7,我们介绍了 ABAP Function Module 的基本使用方法: 7. ABAP function module 的使用最近我的知识星球有朋友提问: 大佬,我想问一下动态获取到物料主数据的字段名之后,如何将获取到的字段名去与bapi中的字段名对应起来从而去修改物料主数据中对应的字…

多维时序 | MATLAB实现CNN-GRU多变量时间序列预测

多维时序 | MATLAB实现CNN-GRU多变量时间序列预测 目录多维时序 | MATLAB实现CNN-GRU多变量时间序列预测基本介绍模型特点程序设计学习总结参考资料基本介绍 本次运行测试环境MATLAB2020b&#xff0c;MATLAB实现CNN-GRU多变量时间序列预测&#xff0c;卷积门控循环单元。 模型特…

ComponentAce FlexCompress强大功能

ComponentAce FlexCompress强大功能 FlexCompress是一个高速压缩库&#xff0c;旨在为您的应用程序提供归档功能。此解决方案提供了灵活的压缩和强大的加密算法&#xff0c;使您可以快速轻松地将归档或备份功能集成到程序中。 FlexCompress包括我们新的独特技术&#xff0c;即交…

分片架构设计技巧

Elasticsearch集群设计技巧 ES的基本架构 节点可以配置为不同角色&#xff0c;通过选举Master管理集群Coordinating&#xff1a;协调节点&#xff1b;Master&#xff1a;管理节点&#xff1b;Data&#xff1a;数据存储节点 数据是按照索引分片的&#xff0c;而不是按照节点分片…

在C#方法中 out、ref、in、params 关键字的用法

out&#xff1a;关键字&#xff1a; 指定的参数在进入函数时会清空自己&#xff0c;必须在函数内部赋初值 ref关键字&#xff1a; 指定的参数必须在进入函数时赋初值&#xff0c;在函数内部可以重新赋值 In关键字&#xff1a; 指定的参数必须在进入函数时赋初值&#xff0c;…

MySQL进阶篇(五)- 锁

一、概述&#xff08;P121&#xff09; 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、 RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性…

51、部署PaddleSeg的pp_liteseg到MNN框架、OpenVINO框架和OAK框架、NPU(RK3399 PRO)框架

基本思想&#xff1a;需要一个快的实例分割模型&#xff0c;由于需要配置oak使用&#xff0c;所以就记录和实现一下微软社区提供的思路&#xff0c;去部署PaddleSeg的轻量级(实际是语义)分割模型 所有的实验模型&#xff0c;花了两天。。。mmp 自己训练模型&#xff0c;开始整…

[附源码]java毕业设计药品销售管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【AI】浅谈梯度下降算法(理论篇)

前言 在求解机器学习算法的模型参数&#xff0c;即无约束优化问题时&#xff0c;梯度下降&#xff08;Gradient Descent&#xff09; 是最常采用的方法之一&#xff0c;另一种常用的方法是最小二乘法。 目前正在学习这方面相关的内容&#xff0c;因此简单谈谈与梯度下降法相关…

13T搅拌运输车冷却系统改进设计

目 录 摘 要 1 Abstract 2 1绪论 5 1.1选题背景及意义 5 1.2研究现状 6 1.2.1 影响13T混凝土搅拌运输车冷却系统的因素以及目前存在的问题 6 1.2.2目前存在的问题 6 1.2.3现代冷却系统研究现状及发展方向 7 1.3研究主要内容 8 2 13T混凝土搅拌运输车冷却系统组成功用和选型 9 2…

m基于PTS+TR的OFDM系统PAPR联合抑制算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 部分传输序列(Partial Transmit Sequence , PTS)由于其不受载波数量限制&#xff0c;并且能够有效的&#xff0c;无失真的降低OFDM信号峰均比&#xff0c;而受到广泛关注。部分传输序列算…

m基于matlab的无线光通信CDMA闭环链路功率控制算法仿真,对比了OOK,2PPM,4PPM,8PPM,16PPM

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 在光通信领域&#xff0c;多址技术主要有WDM(波分复用)、TDM(时分复用)及OCDMA(光码分多址)三种方式。OCDMA技术从70年代中期开始出现&#xff0c;现在引起了人们的广泛重视。将CDMA(码分…

谁能拒绝一个会动的皮卡丘挂件

说在前面 &#x1f388;相信很多80、90后的朋友&#xff0c;对QQ宠物印象非常深刻&#xff0c;每次开机宠物就会自动跑出来。曾经很多人想饿死他&#xff0c;但失败了&#xff1b;也有很多人一上线就退出&#xff0c;但就是不愿因取消“开机自动开启”的勾选。2018年09月15日&a…