线程的四个属性

news2024/11/17 17:24:50

线程各属性纵览

如上图所示,线程有四个属性:

  • 线程ID
  • 线程名称
  • 守护线程
  • 线程优先级

1. 线程ID

  • 每个线程都有id,这个id不能修改

  • 线程id会不停的自增,从1开始

  • main函数就是第一个线程,id=1

id 是操作系统用来识别各个线程的编号,具有唯一性,从下面 java 的源码中看到,这个线程的Id初始值是0,但是每一次生成Id的时候都是先自增的(++threadSeqNumber),所以起始值实际是1。

测试代码:

/******
 * 线程Id从1开始,JVM运行起来后,自己创建的线程的Id早已不是0
 */
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就直接为12了???

我们打断点调试发现,在我们的子线程创建之前,JVM其实已经为我们创建了许多线程

  • Signal Dispatcher是把操作系统的信号发给我们适当的程序的。
  • Reference Handler是和GC相关的引用线程。
  • Finalizer是负责执行Finalizer对象的方法。

2. 线程名字

(1) 默认线程名的源码分析

  • 有参构造器,指定线程名

  • 无参构造器,默认为Thread- ,后接 nextThreadNum ,这个数字为0开始,自增

(2) 手动设置线程名字 setName()

从上图中 java 的源码可以看到,this.name = name 是修改 java 层面的线程的名字,然后 setNativeName() 是native方法(C/C++层面给线程的名字做一个设置),但当线程启动之后,这个C/C++层面的名字不能修改了;不过 Java 层面的线程名字还是可以修改的。为什么当线程起来之后C/C++层面不能修改,是因为他做了一个!=0(线程的状态)的判断,为0时就是线程 new 出来后还没有 start。

3. 守护线程

线程类型有两种:守护线程、用户线程

守护线程的作用: 给用户线程提供服务。

用户线程和守护线程分类的标准:这个线程是否会阻止 JVM 的退出。当还有用户线程在执行的时候JVM是不会停止的,如果当前只剩下了守护线程,那么守护线程会随着JVM一起停止。

线程类型的特性:

  • 线程类型默认继承自父线程
  • 通常而言,所有的守护线程都是由 JVM 启动。在 JVM 启动的时候有一个非守护线程,那就是main函数。
  • 守护线程不影响 JVM退出,当 JVM 退出的时候,他只看有没有用户线程。

守护线程和用户线程区别

  • 整体上没有区别(只是代码的任务不一样)
  • 唯一区别在于是否影响 JVM 的退出(如果是用户线程会影响JVM的退出,守护线程则不会)

4. 线程优先级

Q:线程的优先级是什么?

A:在操作系统中,线程可以划分优先级,线程优先级越高,获得 CPU 时间片的概率就越大,但线程优先级的高低与线程的执行顺序并没有必然联系,优先级低的线程也有可能比优先级高的线程先执行。

优先级有10个级别,默认5,在Java源码中有三个定义,最低,默认,最高的优先级定义,如下图。

线程虽然有优先级这个设定,但是实际开发中尽量不要设置优先级,即对程序的设计不应该依赖于优先级,主要原因如下:

  • 不同的操作系统优先级不同

    • window中只有7个优先级,java 程序运行在 windows 系统时,会进行优先级映射时,就可能会有多个优先级映射成一个优先级

    • linux中所有线程优先级会被忽略,所有线程优先级一致

  • 优先级可能会被操作系统修改,即优先级高的程序不一定被优先执行

5. 总结

属性总结

文章来源:线程的四个属性

个人微信:CaiBaoDeCai

微信公众号名称:Java知者

微信公众号 ID: JavaZhiZhe

谢谢关注!

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

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

相关文章

DHVT:在小数据集上降低VIT与卷积神经网络之间差距,解决从零开始训练的问题

VIT在归纳偏置方面存在空间相关性和信道表示的多样性两大缺陷。所以论文提出了动态混合视觉变压器(DHVT)来增强这两种感应偏差。 在空间方面,采用混合结构,将卷积集成到补丁嵌入和多层感知器模块中,迫使模型捕获令牌特征及其相邻特征。 在信…

tcp shrinking window 之进退

一个有趣的问题:Unbounded memory usage by TCP for receive buffers, and how we fixed it 引出一个 kernel patch:[PATCH] Add a sysctl to allow TCP window shrinking in order to honor memory limits 但这 patch 把一个问题变成了两个问题&#…

apple pencil一代的平替有哪些品牌?平价电容笔推荐

要知道,真正的苹果原装电容笔,价格可不低,仅仅一支就是近千块。实际上,平替电容笔对没有太多预算的用户是个不错的选择。一款苹果的电容笔的售价,相当于平替电容笔的四倍,不过平替电容笔的书写体验&#xf…

pnpm对npm及yarn降维打击详解

目录 正文npm2yarnpnpm总结 正文 大家最近是不是经常听到 pnpm,我也一样。今天研究了一下它的机制,确实厉害,对 yarn 和 npm 可以说是降维打击。 那具体好在哪里呢? 我们一起来看一下。 我们按照包管理工具的发展历史&#xf…

3.5 凸多边形最优三角部分

博主简介:一个爱打游戏的计算机专业学生博主主页: 夏驰和徐策所属专栏:算法设计与分析 1.什么是多边形的三角剖分? 多边形三角剖分是指将多边形分割成互不相交的三角形的弦的集合T。 我的理解: 多边形三角剖分是将给…

uniapp本地存储详解

uniapp本地存储详解 前言 在开发uniapp应用时,我们常常需要使用本地存储来保存一些数据,比如用户登录信息、设置项等,使得应用能够在设备上保存和读取数据,以便提供更好的用户体验和离线功能支持,本文将简单介绍unia…

python编程——编译器与解释器

作者:Insist-- 个人主页:insist--个人主页 本文专栏:python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 前言 一、编译器与解释器的介绍 二、编译器与解释器…

JDK1.8下载安装(优雅)

bug虐我千百遍,我待bug如初恋。 这里使用的环境是win11 64位系统,应该适配win8-win11 一、下载 这里提供两种下载方式,官网下载和第三方下载,区别就是下载速度不同 1. 官网下载 (1)官网下载:…

智慧物流货运系统源码 货运平台的功能介绍

网络货运平台源码 网络货运平台的功能 网络货运是指利用互联网平台,通过物流配送的方式进行商品销售和物流运输的一种新型商业模式。这种模式将传统的货运模式与互联网技术相结合,通过网络平台进行交易、物流配送和结算等一系列商业流程,从而…

用户画像如何创新破局数据驱动增长 | 数据增长

用户画像即用户信息标签化,就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后,完美地抽象出一个用户的商业全貌,是企业应用大数据技术的基本方式。例如:通过收集用户的人口属性、行为属性、消费习惯…

面向初学者的数据科学|要学习的内容概述

面向初学者的数据科学|要学习的内容概述 数据科学家是21世纪最性感的工作。每个人都想变得性感。该领域开始变得竞争激烈,提高了就业标准。 因此,仅仅知道如何使用不同的工具是不够的,求职者需要能够抓住基本的概念和技术,然后应用…

VMware Cloud Foundation 5.0 发布 - 领先的多云平台

VMware Cloud Foundation 5.0 发布 - 领先的多云平台 高效管理虚拟机 (VM) 和容器工作负载。为本地部署的全栈超融合基础架构 (HCI) 提供云的优势。 请访问原文链接:https://sysin.org/blog/vmware-cloud-foundation-5/,查看最新版。原创作品&#xff…

DEMO:F4帮助 收藏夹功能

货铺QQ群号:834508274微信群不能扫码进了,可以加我微信SAPliumeng拉进群,申请时请提供您哪个模块顾问,否则是一律不通过的。进群统一修改群名片,例如BJ_ABAP_森林木。群内禁止发广告及其他一切无关链接,小程…

没有硬件资源?免费使用Colab搭建你自己的Stable Diffiusion在线模型!保姆级教程...

部署 Stable Diffusion 需要一定的硬件资源,具体取决于要处理的图像大小和处理速度等因素。一般来说,至少需要一台具有较高计算能力的服务器,而对 GPU 的高要求就限制了我们学习和使用SD来生成我们想要的图像。 GPU是深度学习开发的重要硬件条…

C++ 学习 ::【基础篇:16】:C++ 类的基本成员函数:拷贝构造函数(认识、特征、注意点及典型使用场景)及其基本写法与调用

本系列 C 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C的三大特性等&#…

FastJSON autoType is not support问题解决

概述 产品在使用内部的后台管理系统时反馈的问题。 于是登录平台,发现如下报错详情: 排查 经过分析,不难得知,请求是从gateway网关转发到对应的统计服务 statistics,此服务有个接口/api/statistics/data/overview…

华为OD机试真题 Java 实现【支持优先级的队列】【2023 B卷 100分】

一、题目描述 实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。 如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。 队列存储的数据内容是一个整数。 二、输入描述 一组待存入队列的数据(包含内…

Java官方笔记4类和对象

创建类 定义类Bicycle: public class Bicycle {// the Bicycle class has// three fieldspublic int cadence;public int gear;public int speed;// the Bicycle class has// one constructorpublic Bicycle(int startCadence, int startSpeed, int startGear) {gea…

李沐动手学习深度学习 2023年Win10 下安装 CUDA 和 Pytorch 跑深度学习(最新)

目录 一、安装Anaconda 1.下载Anaconda 测试是否安装成功 二、安装pytorch 验证pytorch是否安装成功 4.测试 3.配置pycharm 一、安装Anaconda 1.下载Anaconda 可以在官网下载,但是速度较慢,这里我选择了清华镜像源的下载 https://mirrors.tuna.t…

Gradio的web界面演示与交互机器学习模型,Blocks的事件侦听《7》

在第一篇文章我们就熟悉了Blocks的用法,使用Blocks比Interface更加灵活,这节重点关注Blocks里面的相关操作。 1、Blocks标准例子 import gradio as grdef greet(name):return "你好 " name "!"with gr.Blocks() as demo:name g…