java多线程-线程属性

news2024/9/23 13:28:47

线程属性

线程各属性

在这里插入图片描述

线程ID

id从 1 开始计数,因为在源码中是如下实现的,初始值设置为0,id是先自增再返回

private volatile int threadStatus = 0;


private static synchronized long nextThreadID() {
    return ++threadSeqNumber;
}
  • 现在来演示以下线程的id
public class Id {

    public static void main(String[] args) {
        Thread thread = new Thread();
        System.out.println("主线程ID " + Thread.currentThread().getId());
        System.out.println("子线程ID " + thread.getId());
    }
}

/*
* 主线程ID 1
子线程ID 20
* */

主线程是起始线程所以id为1,但是上面代码中我们新创建的线程id为 20 ,而不是2

解释上述问题可以用debug的方式来看

在打印子线程id的那行代码打上一个断点,看图片中箭头所指的方向可知,主线程之外,除了我们自己创建的线程,JVM还创建了很多线程,所以导致我们创建的线程id不为2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AjkryBtp-1674877827964)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230128112046624.png)]

线程名字

默认线程名字源码

当我们没有指定线程的名字时,线程会用Thread-0,Thread-1这种形式命名,后面的数字会自增

public Thread() {
    init(null, null, "Thread-" + nextThreadNum(), 0);
}

private static int threadInitNumber;
private static synchronized int nextThreadNum() {
        return threadInitNumber++;
    }

设置线程名字源码

创建线程之后可以用setName方法来对线程的名字进行更改

但是native层面的名字,线程启动之后就不能再被更改

public final synchronized void setName(String name) {
    checkAccess();
    if (name == null) {
        throw new NullPointerException("name cannot be null");
    }

    this.name = name;
    // 检查线程是否启动
    if (threadStatus != 0) {
        setNativeName(name);
    }
}

/* Java thread status for tools,
     * initialized to indicate thread 'not yet started'
     */
private volatile int threadStatus = 0;

private native void setNativeName(String name);

守护线程

作用:为其他线程提供服务,比如:垃圾处理器

特性

  • 线程类型默认继承自父线程

我们自己创建的线程为用户线程,因为父线程就是用户线程

守护线程创建的子线程,也为守护线程

如果用用户线程创建守护线程,需要用setDaemon()方法手动更改线程的属性

  • 通常所有的守护线程都由JVM来启动
  • 守护线程不影响JVM的退出

和普通线程的区别

整体上两者并无区别,区别在于,守护线程不会影响JVM的退出

用户线程负责执行逻辑,守护线程负责服务于用户线程

程都由JVM来启动

  • 守护线程不影响JVM的退出

和普通线程的区别

整体上两者并无区别,区别在于,守护线程不会影响JVM的退出

用户线程负责执行逻辑,守护线程负责服务于用户线程

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

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

相关文章

处理比赛数据记录

文章目录一、需求二、爬取阶段1.使用requests进行请求获取网页内容2.使用selenium模拟人操作浏览器获取网页内容(1)环境配置(2) 源码3.使用phantomjs模拟人操作浏览器获取网页内容浅浅记录一下自己在做一个比赛数据处理过程中的遇到的一些问题。一、需求 首先数据的格式是长下…

AcWing 1064. 小国王(状态压缩DP)

AcWing 1064. 小国王一、问题二、思路1、整体逻辑2、状态表示3、状态转移4、循环设计5、初末状态三、代码一、问题 二、思路 1、整体逻辑 我们看下面这个例子: 如果我们一行一行放的话。 在上图中,我们先看第二行,我们发现第二行在哪个位…

NR R16 上行满功率传输(ULFPTx)

微信公众号同步更新,欢迎关注同名“modem协议笔记” UL full power Tx(ULFPTx Mode),上行满功率传输,是R16版本的一个增强,R15由于受限于codebook和PUSCH功率控制,某些情况下无法达到满功率传输(例如26dBm…

论文投稿指南——中文核心期刊推荐(建筑科学 2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

齐晖医药冲刺上市:毛利率持续下滑,刘祥宜和朱建民夫妇为实控人

近日,江苏齐晖医药科技股份有限公司(下称“齐晖医药”)递交预披露招股书,准备在上海证券交易所主板上市。本次冲刺上市,齐晖医药计划募资6.97亿元,将用于动保原料药生产基地项目、研发中心建设项目&#xf…

“编辑距离”系列总结,一文读懂(Java实现)

目录 一、判断子序列 ——>删除元素 1.1、dp定义 1.2、递推公式 1.3、初始化 1.4、遍历顺序 1.5、解题代码 二、不同的子序列 ——>删除元素 2.1、dp定义 2.2、递推公式 2.3、初始化 2.4、遍历顺序 2.5、解题代码 三、两个字符串的删除操作 ——>删除元素…

设计模式 - 六大设计原则之DIP(依赖倒置原则)

文章目录概述CaseBad ImplBetter Impl概述 设计代码架构时,高层模块不应该依赖于底层模块,二者都应该依赖于抽象。 抽象不应该依赖于细节,细节应该依赖于抽象。 依赖倒置原则是实现开闭原则的重要途径之一, 它降低了类之间的耦合…

代码随想录算法训练营第十天 | 理论基础,232.用栈实现队列,225. 用队列实现栈

一、参考资料理论基础文章讲解:https://programmercarl.com/%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 用栈实现队列题目链接/文章讲解/视频讲解:https://programmercarl.com/0232.%E7%94%A8%E6%A0%88%E5%AE%9E%E…

【Linux】多线程详解(上)

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…

百度2015年系统工程师笔试题:判断当前机器的大小端

本篇文章主要讲解大小端的判断问题,需要拥有指针,位段,联合体的知识。 目录 一.题目呈现 二.三种解题方法 1.巧妙利用指针和强制转换 2.利用位段的特性 3.利用联合体的性质 一.题目呈现 请简述大端字节序和小端字节序的概念,…

剑指 Offer 03. 无重复字符的最长子串 [C语言]

目录题目思路1代码1结果1思路2代码2结果2该文章只是用于记录考研复试刷题题目 Leetcode 03: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所…

A股上市公司招投标数据

一、数据简介 招投标是指在市场经济条件下进行大宗货物的买卖、工程建设项目的发包与承包以及服务项目的采购与提供时所采取的一种普遍交易方式。招标和投标是一种商品交易行为,是交易过程的两个方面。历经三十多年的发展,我国已经形成了覆盖全国各领域、…

Java类和对象的学习笔记

本篇介绍了面向对象和面向过程的关系,类的定义,对象的成员(成员变量,成员方法)和对象成员访问,类和对象的关系 对象的初始化,对象的构造(构造方法的定义和使用),对象内的this介绍和用法… 细节较多.建议收藏,看完此篇,踏上面向对象的第一步~ 类和对象的学习一.初识面向对象1.什…

一文读透JVM虚拟机结构[迭代中]

注: 码字辛苦, 转载请标注转载来源 jvm结构图: [1] 整个JVM架构包含三部分: 类加载 加载 双亲委派机制 链接 初始化 静态变量的初始值赋值 运行时数据区域 线程私有区域线程共享区域 执行引擎 解释器JIT即时编译器GC 运行时数据区域 线程私有区域: 线程私有区域主…

Springboot整合分布式链路追踪SkyWalking之探针使用和链路采集实战(二)

目录 1.链路追踪-框架Springboot项目搭建 1.1 创建一个Springboot项目 1.2 SpringBootMybaitsPlusMysql开发测试接口 1.2.1 添加依赖配置pom.xml 1.2.2 添加配置 application.properties 1.2.3 开发接口 ​ 2.分布式链路追踪的卧底 Skywalking Agent 探针介绍 2.1 Skyw…

Java设计模式-解释器模式Interpreter

介绍 在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法 分析树,最终形成一颗抽象的语法分析树。这里的词法分析器和语法分析器都可以看做是解释器解释器模式(Interpreter Patte…

Linux操作系统使用git提交代码

引言: 北京时间 2023/1/27/9:50,今天的起床时间9:05,可以看出我们是提前了一些些,但是不是我的功劳,当然也不是我的闹钟的功劳,毕竟我的闹钟是8:20和8:50的,因为我亲爱的老妈……懂…

threejs相机控件使用记录

文章目录前言控件列表轨迹球控制器(TrackBallControls)第一人称控制器(FirstPersonControls)飞行控制器(FlyControls)轨道控制器(OrbitControls)总结前言 threejs提供了很多摄像机控…

mixamo和ue小白人映射关系以及让mixamo绑定的人物在场景中运动的多种方法实践...

ue中的root->Hips ue中 ik_foot_l ik_foot_r下面有foot_r 在mixamo下面leftfoot对应ik_foot_l 但是foot_l 只能给他对应leftToeBase 了 image.pngspline 盆骨对应pelvis 在绑定控制中进行修改即可. image.png方法一 拷贝动画蓝图 [本人原创方法] 此方法毕竟操蛋,虽然完美兼容…

Linux驱动开发基础__休眠与唤醒

目录 1 适用场景 2 内核函数 2.1 休眠函数 2.2 唤醒函数 3 驱动框架 4 编程 4.1 gpio_key_drv.c 4.2 button_test.c 4.3 Makefile 1 适用场景 在前面引入中断时,我们曾经举过一个例子: 妈妈怎么知道卧室里小孩醒了? 休眠-唤醒&…