线程的四个属性

这篇具有很好参考价值的文章主要介绍了线程的四个属性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

线程的四个属性

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

  • 线程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. 总结

线程的四个属性

文章来源:https://mp.weixin.qq.com/s?__biz=MzU3NDgyMTIxMw==&mid=2247484552&idx=2&sn=9667c58b85d0cc52a30d27beec36087d&chksm=fd2dc2baca5a4bac168dccfd70d55e39db7203b0ef60a53e2e0ff9fd3f8bba7b9558e7d322f7#rd文章来源地址https://www.toymoban.com/news/detail-469441.html

个人微信:CaiBaoDeCai

微信公众号名称:Java知者

微信公众号 ID: JavaZhiZhe

谢谢关注!

到了这里,关于线程的四个属性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详解数字化转型的四个层级

    数字化转型是指组织利用数字技术来改变其业务模式、流程和文化,以提高效率、增强竞争力和创造更好的客户体验。数字化转型是一个复杂的过程,涉及组织的多个方面。在这个过程中,有四个主要的层级需要被理解和管理。本文将详细介绍数字化转型的四个层级,以及每

    2024年02月01日
    浏览(24)
  • 用wireshark流量分析的四个案例

    目录 第一题 1 2 3 4 第二题 1 2 3. 第三题 1 2 第四题 1 2 3 题目: 1.黑客攻击的第一个受害主机的网卡IP地址 2.黑客对URL的哪一个参数实施了SQL注入 3.第一个受害主机网站数据库的表前缀(加上下划线例如abc ) 4.第一个受害主机网站数据库的名字 打开流量包,直接筛选http || tls找

    2024年02月10日
    浏览(31)
  • 从大数据的四个V了解它

    我们一起创造了比以往更多的数据。想想看,除了工作之外,你在日常生活中创造了多少数据!例如,社交媒体上浏览的信息,Spotify上的音乐列表。将这些数据与来自世界各地其他人和组织的所有数据结合起来,你会感到头晕。我们的行为,无论是线上还是线下,都会产生数

    2024年02月04日
    浏览(36)
  • 【Go】常见的四个内存泄漏问题

    1、这里更多的是由于channel+for+select导致的,错误的写法导致了发送者或接收者没有发现channel已经关闭,任务已经结束了,却仍然在尝试输入输出https://geektutu.com/post/hpg-exit-goroutine.html 不要把map用作全局

    2024年02月13日
    浏览(35)
  • 矩阵相似的四个必要条件及性质证明。

    1.四个必要条件 2.严格证明 必要1 秩相等 必要2 行列式相等 必要3 特征值相等 必要4 迹相等 1.矩阵相似性质 2.严格证明 性质1 次幂相似,多项式相似 性质2 可逆相似,可逆的多项式相似 性质3 转置相似 性质4 伴随相似

    2024年02月15日
    浏览(28)
  • 大模型时代下做科研的四个思路

    背景 在模型越来越大的时代背景下,如何利用有限的资源做出一些科研工作。 四个方向 1、Efficient(PEFT) 提升训练效率,这里以PEFT(parameter efficient fine tuning)为例 2、Existing stuff(pretrained model)、New directions 使用别人的预训练模型,新的研究方向 3、plug-and-play 做一些即插即用的模

    2024年02月01日
    浏览(23)
  • 程序员避免项目延期的四个小窍门!

    原创:陶朱公Boy(微信公众号ID:taozhugongboy),欢迎分享,转载请保留出处。 点评: 身为程序员的你,不知道在你身上曾经有没有发生过,因为种种原因,导致项目延期的情况?(约定某个时间点上线,结果拖到几天时间后)这里面我相信肯定有一些客观因素存在:比如就

    2024年02月08日
    浏览(33)
  • NX二次开发获取圆弧的四个象限点

     我是用来用来画水路线框的UF_MODL_ask_curve_points()可以按弧长或者弧度获取曲线的等分点,取PI/2的圆弧,即将圆弧四等分,你也可以取任意等分点。

    2024年01月21日
    浏览(38)
  • 在 Linux 中把用户添加到组的四个方法

    Linux 组是用于管理 Linux 中用户帐户的组织单位。对于 Linux 系统中的每一个用户和组,它都有惟一的数字标识号。它被称为 用户 ID(UID)和组 ID(GID)。组的主要目的是为组的成员定义一组特权。它们都可以执行特定的操作,但不能执行其他操作。 Linux 中有两种类型的默认组

    2024年04月11日
    浏览(36)
  • 虚拟数字人全面落地的四个挑战:技术、产品、市场、法律

    近两年,虚拟数字人随着元宇宙的风潮得到了许多人的关注。在国内,虚拟数字人在一些领域开始应用,例如直播带货、客服等。虽然虚拟数字人看起来有很好的前景,但实际上虚拟数字人要想得到全面的落实,仍然还有很长的一段路需要走,有一些挑战需要去克服。 首先是

    2023年04月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包