当前位置: 首页 > news >正文

【多线程-从零开始-贰】线程的构造方法和常见属性

Thread 的常见构造方法

image.png|526

  • 在创建线程的时候,是可以给线程起名字的。默认为 Thread-0 、Thread-1…

    • 不会影响线程执行效果,可以更好地进行管理
      image.png|355
  • ThreadGroup -线程组

    • 把多个线程放到一组里,方便统一的设置线程的一些属性
    • 不过现在很少用到,线程相关属性用的也不太多,更多会用到“线程池”

Thread 的几个常见属性

image.png|454

  • 通常情况下,一个 thread 对象,就是对应到系统内部的一个线程(PCB),但也可能会存在一个情况——Thread 对象存在,但是系统内部的线程已经没了/还没创建
  • 设置不同的优先级会影响到系统的调度。这里的影响是基于“统计”规则的影响,直接肉眼观察,很难看到效果

前台线程:

[!NOTE] 后台线程/前台线程

  • 若某个线程在执行过程中,可以阻止进程结束,此时这个线程就是“前台线程
  • 若某个线程在执行过程中,不能阻止进程结束(虽然线程在执行着,但是进程要结束了,此时这个线程也会随之被带走)这样的线程就是“后台线程”,也叫做“守护线程
  • 一个进程中,前台线程可以有多个(创建线程的时候默认就是前台的),必须所有的前台线程都结束,进程才能结束

  • 前台线程就相当于是饭桌上的“老大”,若只有一个老大,他走了饭局就散了;若有很多老大,那得他们一起商量结不结束;后台线程就相当与是后台上的我,走不走无所谓,小透明
public class test3 {  public static void main(String[] args) {  System.out.println("hello main");  Thread t = new Thread(() -> {  while(true){  System.out.println("hello thread");  try{  Thread.sleep(1000);  }catch (InterruptedException e){  throw new RuntimeException(e);  }            }        });//将t线程设为后台进程,只要main进程结束,整个进程就结束了  t.setDaemon(true);  t.start();  }
}

把 t 进程设为后台进程后,程序中就只有 main 一个前台线程了,所以只要 main 执行完,整个进程就结束了

又因为线程是并发执行的,所以 t 线程中的执行逻辑可能赶在 main 线程执行前执行

所以最终打印结果一定有“hello main”,可能也有“hello thread

  • 前台进程和后台进程唯一的区别就是控制结束时间
  • 一个进程中必须得有一个前台线程


是否存活:

  • 代码中,创建的 newThread 对象的生命周期和内核中实际的线程是不一样的,可能会出现 Thread 对象仍然存在,但内核中的线程不存在了这种情况
    1. 调用 start 之前,内核中还没有创建线程
    2. 线程的 run 执行完毕了,内核的线程就没有了,但是 Thread 对象仍然存在
    • 不会出现 Thread 对象不存在,线程还存在的这种情况

isAlive()

  • 为 true,表示内核线程存在
  • 为 false,表示内核线程没了
public static void main(String[] args) throws InterruptedException {  Thread t = new Thread(() -> {  for(int i = 0; i < 3; i++) {  System.out.println("hello thread");  try {  Thread.sleep(1000);  } catch (InterruptedException e) {  throw new RuntimeException(e);  }        }    });  System.out.println(t.isAlive());  //false  t.start();  System.out.println(t.isAlive());  //true  Thread.sleep(5000);  System.out.println(t.isAlive());  //false  
}
  • 第一次打印 false:此时线程还未创建
  • 第二次打印 true:此时线程创建了,但还没结束
  • 第三次打印 false:由于 main 线程此时还在休眠,所以只考虑 t 线程,又因为 t 线程的 run 在五秒之内已经执行完了,所以线程就没有了

  • 由于线程之间的调度顺序是不确定的,如果两个线程都是 sleep(3000),此时,当时间一到,两个线程谁先执行,谁后执行是不一定的,所以打印出 true 还是 false 是不确定的
  • 但不一定不是指双方概率相等,双方概率会随着系统的不同,代码运行环境的不同而改变

相关文章:

【多线程-从零开始-贰】线程的构造方法和常见属性

Thread 的常见构造方法 在创建线程的时候&#xff0c;是可以给线程起名字的。默认为 Thread-0 、Thread-1… 不会影响线程执行效果&#xff0c;可以更好地进行管理 ThreadGroup -线程组 把多个线程放到一组里&#xff0c;方便统一的设置线程的一些属性不过现在很少用到&#…...

力扣:100379. 新增道路查询后的最短距离 I(Java,BFS)

目录 题目描述&#xff1a;示例 &#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给你一个整数 n 和一个二维整数数组 queries。 有 n 个城市&#xff0c;编号从 0 到 n - 1。初始时&#xff0c;每个城市 i 都有一条单向道路通往城市 i 1&#xff08; 0 < i < …...

程序开发的常用设计思想

程序开发的设计思想多种多样&#xff0c;每种思想都旨在提高软件的可读性、可维护性、可扩展性和性能。以下是一些常见的程序开发设计思想&#xff1a; 1. 面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09; 核心思想&#xff1a; 将程序视为对象的集合…...

Qt之Gui

组件依赖关系 应用 #mermaid-svg-GADicZtZJRVVUeiF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GADicZtZJRVVUeiF .error-icon{fill:#552222;}#mermaid-svg-GADicZtZJRVVUeiF .error-text{fill:#552222;stroke:#…...

Linux操作系统之进程信号

进程信号 一、信号1、概念2、系统定义的信号列表3、常见的信号处理方式 二、产生信号的方式1、终端按键&#xff08;1&#xff09;组合键&#xff08;2&#xff09;示例代码&#xff08;3&#xff09;运行结果 2、调用系统函数&#xff08;1&#xff09;kill命令&#xff08;2&…...

科普文:微服务之Spring Cloud Alibaba消息队列组件RocketMQ工作原理

概叙 本文探讨 RocketMQ 的事务消息原理&#xff0c;并从源码角度进行分析&#xff0c;以及事务消息适合什么场景&#xff0c;使用事务消息需要注意哪些事项。 同时详细介绍RocketMQ 事务消息的基本流程&#xff0c;并通过源码分析揭示了其内部实现原理&#xff0c;尽管事务消…...

黑马头条vue2.0项目实战(五)——首页—频道编辑

目录 1. 使用页面弹出层 1.1 页面弹出层简单使用 1.2 创建频道编辑组件 1.3 页面布局 2. 展示我的频道 3. 展示推荐频道列表 3.1 获取所有频道 3.2 处理展示推荐频道 4. 添加频道 5. 编辑频道 5.1 处理编辑状态 5.2 切换频道 5.3 让激活频道高亮 5.4 删除频道 6.…...

Java:基础语法

基础语法 1. 基本结构类和方法 2. 变量和数据类型基本数据类型引用数据类型 3. 操作符算术操作符比较操作符逻辑操作符 4. 控制结构条件语句循环语句 5. 数组6. 方法7. 面向对象编程类和对象继承多态 8. 异常处理9. 常用类库 1. 基本结构 类和方法 Java程序的基本单位是类&am…...

安装bedtools详细步骤和详细介绍bedtools用法

安装bedtools详细步骤和详细介绍bedtools用法 一、安装bedtools详细步骤下载解压安装编译依赖编译设置环境变量激活环境变量执行命令查看版本二、详细介绍bedtools用法使用bedtools示例用法bedtools intersectbedtools bamtobedbedtools window一、安装bedtools详细步骤 下载 …...

21 - grace数据处理 - 补充 - 泄露误差改正 - Slepian局部谱分析法(一) - slepian分析法理论理解

21 - grace数据处理 - 泄露误差改正 - Slepian局部谱分析法 - slepian分析法理论理解 0 引言1 slepian谱分析法1.1 slepian谱分析法AI解释1.2 基于slepian谱分析法的GRACE数据处理应用2 slepian谱分析法关键过程实现2.1 求解正定特征方程2.2 计算slepian基函数2.3 计算Shannon数…...

WLAN国家码与信道顺从表

国家码和信道顺从表及信道功率限制 不同的国家和地区规定了在本国或本地区可以使用的信道、射频信号在信道中的最大发射功率。工作在不同信道的射频信号&#xff0c;信号强度可能会有差别。国家码和信道顺从表、各信道的功率限制值、信道编号和频率对照关系请参见国家码和信道…...

行为型设计模式1:状态/策略/命令

行为型设计模式&#xff1a;状态/策略/命令 (qq.com)...

【知识专栏丨python数分实战】天猫订单数据分析及可视化|taobao天猫订单接口

今天这篇文章将给大家介绍天猫订单数据分析及可视化案例。 import pandas as pdimport numpy as npfrom pyecharts.charts import Pie,Bar,Line,Map,Map3D,Funnelfrom pyecharts import options as optsimport matplotlib.pyplot as pltimport warningsimport seaborn as snsfr…...

[kimi笔记]为什么csc.exe不可以双击运行

csc.exe 是 C# 编译器的可执行文件&#xff0c;它是 .NET Framework 的一部分&#xff0c;用于编译 C# 源代码文件&#xff08; .cs 文件&#xff09;生成可执行文件&#xff08; .exe 文件&#xff09;或其他类型的程序集。 csc.exe 不能通过双击运行的原因有以下几点&…...

护眼大路灯哪个牌子好?2024学生护眼大路灯推荐

护眼大路灯哪个牌子好&#xff1f;护眼大路灯不仅能够提供日常的光线照明&#xff0c;还模拟了太阳光光线&#xff0c;使在室内用眼学习也能够有着自然光般的舒适感&#xff0c;但现在市场上有许多对产品质量把控不过关、光线效果欠佳、存有安全隐患的劣质护眼大路灯产品&#…...

Vue项目中手搓滑动校验模块-demo

实现代码 SliderCheck.vue <template><div class"drag" ref"dragDiv"><div class"drag_bg" ref"dragBg"></div><div class"drag_text" ref"dragText">{{ confirmWords }}</di…...

Socket如何实现客户端和服务器间的通信

Socket 是实现网络通信的一种机制&#xff0c;它允许在不同主机之间的进程通过网络进行数据交换。下面我将简要介绍如何使用 Socket 实现客户端和服务器间的通信。 客户端-服务器通信步骤&#xff1a; 服务器端&#xff1a; 创建服务器端 Socket&#xff1a; 服务器端通过创…...

基于Spring boot + Vue的校园论坛

作者的B站地址&#xff1a;程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csdn地址&#xff1a;程序员云翼-CSDN博客 1.项目技术栈&#xff1a; 前后端分离的项目 后端&#xff1a;Springboot MybatisPlus 前端&#xff1a;Vue ElementUI 数据库&#xff1a; …...

RabbitMQ高级特性 - 生产者消息确认机制

文章目录 生产者消息确认机制概述confirm 代码实现return 代码实现 生产者消息确认机制 概述 为了保证信息 从生产者 发送到 队列&#xff0c;因此引入了生产者的消息确认机制. RabbitMQ 提供了两种解决方案&#xff1a; 通过事务机制实现.通过发送确认机制&#xff08;confi…...

webpack的loader机制

webpack的loader机制 loader本质上就是导出函数的JavaScript模块。导出的函数&#xff0c;可以用来实现内容的转换。 /* * param{string|Buffer} content 源文件的内容 * param{object} [map] SourceMap数据 * param{any} [meta] meta数据&#xff0c;可以是任何数据 * */ fu…...

智能文档处理新范式:Umi-OCR双层PDF功能让家庭与学生文档管理效率倍增

智能文档处理新范式&#xff1a;Umi-OCR双层PDF功能让家庭与学生文档管理效率倍增 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维…...

D3KeyHelper:如何通过智能操作优化解放暗黑3玩家双手的效率工具

D3KeyHelper&#xff1a;如何通过智能操作优化解放暗黑3玩家双手的效率工具 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 一、问题场景&#xff1a…...

收藏!新手程序员必看:大模型入门指南,告别“没基础”焦虑

准备入门大模型&#xff1f;请立刻丢掉“我没基础”“这技术太难”的顾虑&#xff01;作为常年深耕技术领域的博主&#xff0c;我始终坚信&#xff1a;只要你有主动学习的意愿&#xff0c;再加上持续的付出&#xff0c;不仅能轻松攻克大模型入门难关&#xff0c;更能熟练运用它…...

盟接之桥®:当新ERP撞上“紧急接入”,WebEDI如何成为制造业的“救命稻草”?

在制造业的数字化征途中&#xff0c;最令人焦虑的场景之一莫过于&#xff1a;“下游客户&#xff08;如汽车主机厂&#xff09;明天就要看EDI对接数据&#xff0c;而你们的全新ERP系统&#xff0c;还在测试环境里试运行。”这绝非危言耸听。在汽车供应链、高端装备制造等领域&a…...

揭秘Zotero PDF Translate离线翻译方案:学术研究数据安全新范式

揭秘Zotero PDF Translate离线翻译方案&#xff1a;学术研究数据安全新范式 【免费下载链接】zotero-pdf-translate Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20 translate services. 项目地址: https://gitcode.com/gh…...

家电安全门神:拆解IEC60730 Class B认证,看你的洗衣机如何防‘发疯’

家电安全门神&#xff1a;拆解IEC60730 Class B认证&#xff0c;看你的洗衣机如何防‘发疯’ 当你按下洗衣机的启动键时&#xff0c;是否想过这个看似简单的动作背后隐藏着多少安全防线&#xff1f;现代家电早已不是机械旋钮时代那么简单——它们内置的电子控制系统如同隐形保镖…...

MySQL 故障排查与生产环境优化笔记

一、基础信息1. 实验环境数据库版本&#xff1a;MySQL 8.0架构&#xff1a;1 台单实例 2 台主从复制环境用途&#xff1a;模拟生产故障、验证优化方案2. MySQL 逻辑架构&#xff08;四层&#xff09;连接层处理客户端连接、授权认证、权限校验提供线程池、SSL 安全连接服务层S…...

ACUITY IMAGING 070-200000控制器模块

ACUITY IMAGING 070-200000 控制 / 模拟模块ACUITY IMAGING 070-200000 是美国 ACUITY IMAGING 公司出品的工业级高精度信号处理与控制模块&#xff0c;主要用于机器视觉、自动化检测及精密成像系统&#xff0c;负责信号采集、逻辑控制与数据传输&#xff0c;是工业视觉系统的核…...

OpenClaw安全实践:用SecGPT-14B自动生成每周漏洞简报

OpenClaw安全实践&#xff1a;用SecGPT-14B自动生成每周漏洞简报 1. 为什么需要自动化漏洞简报 作为安全工程师&#xff0c;每周手动整理CVE漏洞报告已经成为我的例行工作。这个过程通常需要&#xff1a; 从NVD、CVE Details等平台爬取最新漏洞数据人工筛选高风险条目评估影…...

OpenClaw新手入门:千问3.5-9B镜像一键部署与初体验

OpenClaw新手入门&#xff1a;千问3.5-9B镜像一键部署与初体验 1. 为什么选择这个组合&#xff1f; 去年冬天&#xff0c;我第一次在本地尝试用OpenClaw自动整理电脑上的照片。当时对接的是GPT-3.5&#xff0c;每次识别图片内容都要消耗大量token&#xff0c;一个月下来账单让…...