并发-启动线程的正确姿势

news2024/11/20 7:04:37

目录

启动线程的正确姿势

Start方法原理解读

Run方法原理解读

常见问题


启动线程的正确姿势

  • start()与run()方法的比较
  • 测试结果可以看出,runnable.run()方法是由main线程执行的,而要子线程执行就一定要先调用start()启动新线程去执行
  • run方法并不能成功启动线程,而start能

Start方法原理解读

  • 方法含义:启动新线程
  • 准备工作:不能重复调用start
  • 结果:抛出非法的线程异常
  • 源码解析
  • 含义
  • 根据start()方法源码,start()方法的执行逻辑为:
    • 首先判断线程是否已经启动
    • 在等待队列里加入此线程
    • 将线程启动标志设置为false
    • 尝试调用start0()native方法启动线程,将启动标志置为true
    • 判断线程是否启动成功,如果没成功,就加入失败队列
  • 分析
  • 启动新线程:
    • start()方法调用后,并不代表线程就已经启动了,只是加入了队列,并且还要看线程启动器
    • start()方法启动后,会有两个线程在执行,一个是主线程,来执行start()方法,第二个就是创建的新的子线程
  • 准备工作:
    • 新建线程,需要做一些准备工作
    • 首先,让新线程进入就绪状态,获取了运行所需要的资源(除了CPU)
    • 分配CPU资源后,才能进入到执行状态
  • 不能重复执行start()方法
    • 一旦执行start后,就会获取资源,进入就绪状态,然后进入执行状态,然后终止,进入终止状态后,再也不能进入其他状态

Run方法原理解读

  • 源码解析
  • 关于run()方法,最需要理解的一点就是,它只是一个方法,哪个线程调用它执行,就是哪个线程的方法,并不是说执行的哪个线程的方法就是哪个线程的方法

常见问题

  • (1)一个线程 两次调用start()方法,会出现什么情况,为什么?
  • 答:start方法开始就进行了检查状态,会直接抛出IllegalThreadStateException()异常
  • (2)既然start()方法会调用run()方法,为什么我们选择调用start()方法,而不是直接调用run()方法呢?
  • 答:调用start()方法才是真正创建一个线程,run方法不会去创建新线程

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

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

相关文章

人工智能|推荐系统——工业界的推荐系统之召回

基于物品的协同过滤 ⽤索引,离线计算量⼤,线上计算量⼩ Swing额外考虑重合的⽤户是否来⾃⼀个⼩圈⼦,两个⽤户重合度⼤,则可能来⾃⼀个⼩圈⼦,权重降低。 基于用户的协同过滤 同样是离线计算索引,在线召回的流程 离散特征处理 Embedding 层参数数量=向量维度 类别数量 矩

知识图谱需求

文章目录 公共安全数字经济金融科技资源优化科学研究制造业转型公共健康人文发展 公共安全 公共安全领域信息化以现代通信、网络、数据库技术为基础,将所研究对象各要素汇总至数据库,并针对各个业务领域进行定制化开发,以满足公共安全实战需求…

网易研发休闲游戏,AI技术助力提升品质

易采游戏网5月3日消息,在数字化时代,游戏已经成为人们休闲娱乐的重要方式。作为国内领先的互联网科技公司,网易一直在游戏领域深耕细作,不断推出高质量的游戏产品。近期,网易宣布正在研发一系列休闲游戏,并…

【k8s】利用Kubeadm搭建k8s1.29.x版本+containerd

文章目录 前言1.准备的三台虚拟机2.安装 kubeadm 前的准备工作3.安装containerd1.解压安装包2.生成默认配置文件3.使用systemd托管containerd4.修改默认配置文件 4.安装runc5.安装 CNI plugins6.安装 kubeadm、kubelet 和 kubectl6.1 配置crictl 7.初始化集群1.打印初始化配置到…

2024五一杯数学建模B题思路分析 - 未来新城背景下的交通需求规划与可达率问题

文章目录 1 赛题选题分析 2 解题思路详细的思路过程放在文档中 ! ! !!!!!3 最新思路更新 1 赛题 B题 未来新城背景下的交通需求规划与可达率问题 随着城市化的持续发展,交通规划在新兴城市建设中显得尤为关…

Idea 自动生成测试

先添加测试依赖&#xff01;&#xff01; <!--Junit单元测试依赖--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.1</version><scope>test</scope><…

【Python可视化】pyecharts

Echarts 是一个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可。而 Python 是一门富有表达力的语言&#xff0c;很适合用于数据处理。当数据分析遇上数据可视化时&#xff0c;pyecharts 诞生了。 需要安…

【idea-sprongboot项目】SSH连接云服务器进行远程开发

继上一篇博客【阿里云服务器】ubuntu 22.04.1安装docker以及部署java环境-CSDN博客 目录 五、远程开发方式 1&#xff09;SSH进行远程开发 步骤 配置文件同步 window电脑远程操控 正式通过window电脑远程操控 运行在linux服务器上的远程程序 调试在linux服务器上的远程程…

【无标题】数模数电的教学文章与资料

在电子技术领域&#xff0c;数模&#xff08;Digital-to-Analog, DA&#xff09;和模数&#xff08;Analog-to-Digital, AD&#xff09;转换器是核心组件&#xff0c;它们连接了模拟世界与数字世界&#xff0c;使得电子设备能够处理现实世界中的连续信号与数字信号系统的交互。…

电话号码的字母组合 【C++】【力扣刷题】

解题思路&#xff1a; 以第一个为例,digits “23”&#xff0c;表明从电话号码的按键中选取2和3这两个字符&#xff0c;然后去寻找它们各自所对应的字母&#xff0c;这里每一个数字字符所对应的字母的不同&#xff0c;0对应的是空字符&#xff0c;而1的话题目中讲到是不对应任…

使用macof发起MAC地址泛洪攻击

使用macof发起MAC地址泛洪攻击 MAC地址泛洪攻击原理&#xff1a; MAC地址泛洪攻击是一种针对交换机的攻击方式&#xff0c;目的是监听同一局域网中用户的通信数据。交换机的工作核心&#xff1a;端口- MAC地址映射表。这张表记录了交换机每个端口和与之相连的主机MAC地址之间…

MATLAB实现遗传算法优化第三类生产线平衡问题

第三类生产线平衡问题的数学模型 假设&#xff1a; 工作站数量&#xff08;m&#xff09;和生产线节拍&#xff08;CT&#xff09;是预设并固定的。每个任务&#xff08;或作业元素&#xff09;只能分配到一个工作站中。任务的执行顺序是预先确定的&#xff0c;且不可更改。每…

JavaScript 动态网页实例 —— 文字移动

前言 介绍文字使用的特殊效果。本章介绍文字的移动效果,主要包括:文字的垂直滚动、文字的渐隐渐显、文字的闪烁显示、文字的随意拖动、文字的坠落显示、页面内飘动的文字、漫天飞舞的文字、文字的下落效果。对于这些效果,读者只需稍加修改,就可以应用在自己的页面设计中。 …

vue快速入门(五十)重定向

注释很详细&#xff0c;直接上代码 上一篇 本篇建立在之前篇目前提下针对重定向进行演示 新增内容 路由重定向写法 源码 src/router/index.js //导入所需模块 import Vue from "vue"; import VueRouter from "vue-router"; import myMusic from "/v…

uniapp乡村社区户籍问外来人员管理系统 微信小程序python+java+node.js+php

基于微信小程序的外来人员管理系统项目的概述设计分析&#xff0c;主要内容有的私教预约平台系统平台的具体分析&#xff0c;进行数据库的是设计&#xff0c;数据采用MySQL数据库&#xff0c;并且对于系统的设计采用比较人性化的操作设计&#xff0c;对于系统出现的错误信息可以…

JZ71 变态跳台阶

&#x1f600;前言 本文探讨了一个有关青蛙跳台阶的变体问题&#xff0c;与传统的台阶跳跃不同&#xff0c;这只青蛙每次可以跳上任意多的台阶。我们需要解决的问题是&#xff1a;对于给定的台阶数&#xff0c;计算青蛙跳上该台阶的所有可能方法。本文将通过动态规划和数学推导…

xftp破解版?No!xftp平替开源工具✔

文章目录 一、背景说明二、WindTerm介绍三、简单使用说明3.1 新建一个ssh连接窗口![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bfbe5114916e4a7e94ca0f9ceb05ca37.png)3.2 输入主机ip和端口号3.3 点击Continue3.4 输入密码3.5 登入成功3.6 下载文件到本地3.7 上…

Springboot(SSM)项目实现数据脱敏

目录 一、引入hutool的依赖 二、sql脚本 三、自定义注解代码 3.1 自定义注解 3.2 自定义一个枚举,用于定义脱敏的类型 3.3 序列化 四、使用脱敏注解 4.1 Person.java 4.2 controller 4.3 dao 五、源代码参考 一、引入hutool的依赖 <dependency><groupId>…

Ftrans文件外发系统 构建安全可控文件外发流程

文件外发系统是企业数据安全管理中的关键组成部分&#xff0c;它主要用于处理企业内部文件向外部传输的流程&#xff0c;确保数据在合法、安全、可控的前提下进行外发。 文件外发系统的主要作用包括&#xff1a; 1、防止数据泄露&#xff1a;通过严格的审批流程和安全策略&…

信创 | 信创产业人才需求与培养机制:优化策略与实践探索

信创产业的人才需求与培养机制面临着多方面的挑战和机遇。首先&#xff0c;信创产业的快速发展带来了巨大的人才需求&#xff0c;但目前人才培养供给与企业发展需求之间存在不匹配的问题。这种不匹配主要表现在课程体系不健全、产教融合不够深入、校企联动性不足以及职业培训市…