【JavaEE】多线程

article/2025/8/23 8:06:43

5.线程启动(statrt方法)

start方法内部,会调用系统api来在系统内核中创建出线程,创建完线程后会自动调用run方法。

而run方法,就只是描述这个线程要执行的任务。

start 和 run 得区别(经典面试题):

1.作用功能不同:

  • run 方法的作用是描述线程具体要执行的任务 
  • start 方法的作用是申请系统线程

2.运行结果不同:

  • run 方法是一个类中的普通方法,主动调用和调用普通方法一样,会按顺序执行一次
  • start 调用方法后,start 方法内部会调用Java 本地方法(封装类对系统底层的调用)真正的启动线程,并执行run 方法中的代码,run 方法执行完后线程就销毁。

6.打断线程(interrupt方法)

在Java中想让一个线程停止运行,需要run 方法尽快结果,执行的任务结束线程也就结束了。

  • 使通过共享的标记位进行沟通

通过改变isVaild 的值结束线程,上面代码是内部类访问外部类的属性。

上面是通过访问"外部"变量修改线程,使线程停止运行(如图1)。看图1会发现报错了,这个就是变量捕获所产生的问题。解决:只要将isVaild 设置成final 变量 或者不修改它的值就不会产生变量捕获问题(如图2).

变量捕获 

在lambda 表达式里面的代码可以自动捕获作用域中涉及的外层变量。使用lambda 表达式需要遵循一个语法规则:变量捕获。

变量捕获:lambda 表达式把当前作用域中的变量在lambda 内部复制一份,所以在lambda 表达式中如果一个变量的值是一直变化的就会出现问题,所以Java中变量捕获的限制是只能捕获一个final 修饰的变量或者是一个没有修改内容的变量(也叫实际上是final 的变量)

使用标志位结束线程这个方法有不足的地方:

  1.  需要手动创建标志位变量
  2. 当线程内部sleep 时,主线程修改变量,新线程内部不能及时响应。也就是当主线程中停止已经开始了,lambda 表达式还在执行,主线程就要等到 run方法执行完才能开始。
  • 调用interrupt 方法来通知

使用interrupt 即使线程内部出现sleep 也可以终止线程。也就是说sleep 会休眠到时间才能唤醒,interrupt就可以使内部触发一个异常(InterruptedException),从而提前结束该线程。

 

使用Thread.isInterrupted() 线程中断会自动清除标志位,而使用Thread.current().isInterrupted() 不会。 

7.等待线程(join方法) 

让一个线程等待另一个线程执行结束再继续执行,本质上就是控制线程结束的顺序。如果主线程中调用t.join() ,此时主线程就要等待t 线程结束再执行后面代码,join默认是带有超时的等待。

如果t 线程正在运行中,此时调用join 的线程就会阻塞(像主线程就是调用了join方法),一直等到t 线程结束为止;如果t 线程已经结束了,此时调用join 线程就直接往后走了不会阻塞。


http://www.hkcw.cn/article/oohxfNhJsD.shtml

相关文章

leetcode hot100刷题日记——31.二叉树的直径

二叉树直径详解 题目描述对直径的理解解答:dfs小TIPS 题目描述 对直径的理解 实际上,二叉树的任意一条路径均可以被看作由某个节点为起点,从其左儿子和右儿子向下遍历的路径拼接得到。 那我们找二叉树的直径(最大路径&#xff09…

C++ —— B/类与对象(下)

🌈个人主页:慢了半拍 🔥 创作专栏:《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》|《史上最强C讲解》 🏆我的格言:一切只是时间问题。 ​ 目录 一、再谈构造函数 1…

Python贷款计算器:等额本息与等额本金还款方案详解

Python贷款计算器:等额本息与等额本金还款方案详解 一、摘要二、整体架构流程1. 输入处理层2. 核心计算层3. 结果输出层三、具体技术细节1. 等额本息实现解析2. 等额本金实现解析3. 输出格式化技术四、运行1.等额本息2.等额本金五、结论附:完整代码一、摘要 本文介绍一款基于…

【Python专栏】Python中的浮点数类型

Python中的浮点数类型是有范围的,我们如何知道浮点数的范围呢?我们可以使用如下的方法来确定我们的浮点数的上下限。 Import sys Print(sys.float_info) 在编程语言中,如果我们计算的是浮点数计算,我们都会碰到计算精度的问题。原因是因为Double

【判断数字递增】2021-12-19

缘由用C/C实现数字递增问题?-编程语言-CSDN问答 给定一个正整数 n,请判断 n 的所有数位上的值是否从左到右是严格递增的。   例如:1589 是严格递增的。   再如:1336 不是严格递增的,中间有相同的 3。   再如&am…

计算机网络之路由表更新

1.解题思路 对新接收到的路由表进行更新,全部"距离"1,且"下一跳路由器"都写成发送方路由器的名称。 开始对比新表和原来的路由表 1.看目的网络 如果是新的目的网络,则直接把对应的各项信息填入表中;如果是相同…

前端学习(7)—— HTML + CSS实现博客系统页面

目录 一,效果展示 二,实现博客列表页 2.1 实现导航栏 2.2 实现个人信息 2.3 实现博客列表 三,实现博客正文页 3.2 复用 3.4 实现博客正文 四,实现博客登录页 4.1 版心 4.2 登录框 五,实现博客编辑页 5.1 …

使用 HTML + JavaScript 实现一个日历任务管理系统

在现代快节奏的生活中,有效的时间管理变得越来越重要。本项目是一个基于 HTML 和 JavaScript 开发的日历任务管理系统,旨在为用户提供一个直观、便捷的时间管理工具。系统不仅能够清晰地展示当月日期,还支持事件的添加、编辑和删除操作&#…

最卸载器——Geek Uninstaller 使用指南

Geek Uninstaller 是一款轻量级的第三方卸载工具,专为 Windows 系统设计,提供比系统默认卸载器更彻底的应用清除能力。它体积小、绿色免安装,使用起来简单直观,但功能却不含糊。 一、为什么要用 Geek Uninstaller? Wi…

在QT中,利用charts库绘制FFT图形

第1章 添加charts库 1.1 .pro工程添加chart库 1.1.1 在.pro工程里面添加charts库 1.1.2 在需要使用的地方添加这两个库函数,顺序一点不要搞错,先添加.pro,否则编译器会找不到这两个.h文件。 第2章 Charts关键绘图函数 2.1 QChart 类 QChart 是…

5G-A:开启通信与行业变革的新时代

最近,不少细心的用户发现手机信号标识悄然发生了变化,从熟悉的 “5G” 变成了 “5G-A”。这一小小的改变,却蕴含着通信技术领域的重大升级,预示着一个全新的通信时代正在向我们走来。今天,就让我们深入了解一下 5G-A&a…

web安全开发,在线%机器学习异常流量检测系统%开发demo

框架:html,css,jquery,echart,python,flask,sklearn,uniapp,apk,kdd和nsl,mysql数据库。 经验心得 这是一个响应式的 H5 页面,适用于手机端和电脑端,平板,各种小程序。本来想vxxx小程序和AndroidStudo写两个但是工作量太多了加上也不是商用&…

每日算法-250531

每日算法学习记录 - 250531 今天完成了两道 LeetCode 题目,主要用到了前缀和的思想。记录如下: 1. 2559. 统计范围内的元音字符串数 题目 思路 前缀和 解题过程 我们可以先预处理出一个前缀和数组 nums,其中 nums[i] 表示 words 数组中从下…

CTFHub-RCE eval执行

观察源代码 我们可以发现源代码是request请求,所以我们可以通过GET或者POST请求,利用cmd参数进行命令执行 判断是Windows还是Linux 用GET请求 /?cmdsystem(ipconfig); 无回显 说明不是Windows系统 /?cmdsystem(ifconfig); 可以发现有回显&…

MCP架构深度解析:从基础原理到核心设计

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…

MySql(九)

目录 条件查询 1&#xff09;准备一张表 2&#xff09;插入数据 3&#xff09;条件查询格式 1---比较运算符 >大于 2---比较运算符 < 小于 3---比较运算符 > 大于等于 4---比较运算符 < 小于等于 5---比较运算符 ! 不等于 6---比较运算符 <> 不等于 7---比较…

赛博算命之“帝王之术”——奇门遁甲的JAVA实现

个人主页 文章专栏 文章目录 个人主页文章专栏 #前言#背景介绍#原理分析**一、干支系统计算**1. **四柱干支生成**2. **旬首与空亡判断** **二、九宫格与洛书模型**1. **地盘固定排布**2. **天盘动态移动** **三、阴阳遁与局数计算**1. **阴阳遁判断**2. **局数计算** **四、九…

C++ 栈(Stack)与队列(Queue)深度解析:从原理到实战

一、栈&#xff08;Stack&#xff09;&#xff1a;后进先出&#xff08;LIFO&#xff09;的线性结构 1. 核心特性与应用场景 特性&#xff1a;仅允许在栈顶进行元素的插入&#xff08;push&#xff09;和删除&#xff08;pop&#xff09;操作&#xff0c;遵循 “后进先出” 原…

【C++高级主题】命令空间(五):类、命名空间和作用域

目录 一、实参相关的查找&#xff08;ADL&#xff09;&#xff1a;函数调用的 “智能搜索” 1.1 ADL 的核心规则 1.2 ADL 的触发条件 1.3 ADL 的典型应用场景 1.4 ADL 的潜在风险与规避 二、隐式友元声明&#xff1a;类与命名空间的 “私密通道” 2.1 友元声明的基本规则…

Python Day38 学习

继续昨日的内容浙大疏锦行 学习一下两种机制&#xff1a;try-except机制和try-except-else-finally机制 try-except 摘自讲义 try&#xff1a;把你认为可能会出错的代码放在这里。 except&#xff1a;如果 try 块里的代码真的出错了&#xff08;从出错开始就不会继续执行t…