Thread构造方法分析

鸿蒙OS开机动画背后的秘密:从代码到视觉的完整解析(附源码分析) 本文深入解析了鸿蒙OS开机动画的系统级实现原理。从bootanimation服务的启动配置、与Render Service的协同,到基于VSync信号的帧率同步与绘制流水线,结合OpenHarmony源码进行了逐行解读。文章揭示了其事件驱动的优雅退出机制,并探讨了视频支持、多屏适配等高级特性与定制化可能,为开发者理解鸿蒙图形子系统提供了硬核技术视角。 阅读详情

Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制。创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象。

JDK1.7及之前Thread构造方法如下

image_5c5bc7ed_3345

image_5c5bc7ed_4d7c

注1 :jdk1.8.0_201版本下,新增了一个构造方法,但是该方法是非 public 的

一、构造方法核心

如前面两个图所示,Thread所有的构造方法都依赖于init 方法

private void init(ThreadGroup g, Runnable target, String name,long stackSize)

所以换一个角度思考,可以认为只有一个构造方法

image_5c5bc7ed_3ff0

这“唯一的一个构造方法”调用的是五个参数的 核心 init 方法。所以说,我们只需要关注底层的该init方法。

注 2:jdk1.8后核心init方法也由5参数变为了6参数

image_5c5bc7ed_127a

这是一种编码规范与设计思维---“构造方法中不设置初始化逻辑,如果需要,那么请将初始化逻辑进行封装”

对于Thread类来说,核心 init 方法,就是这个初始化逻辑的封装方法,所有的构造方法都依赖他。

这里只介绍参数中的部分,name 和 target 过于简单。

1.1 ThreadGroup g

ThreadGroup表示该线程所在的线程组,如果没有显式指定,那么底层调用init时,传递的参数为null,如果参数传递为null的话,ThreadGroup会有默认值的设置,如果有安全管理器,会请求管理器进行设置,如果安全管理器不存在或者根本就没有明确的指示,那么将会获取父线程的所在的线程组,父线程就是创建他的线程 Thread parent = currentThread(); 

所以,ThreadGroup是非必填项,如果不进行设置,会有默认初始值

image_5c5bc7ed_15a1

1.2  long stackSize

每个线程都有私有的虚拟机栈,通过这个值可以设置栈空间的大小,Thread内部属性stackSize,设置的就是这个值。

堆栈大小是虚拟机要为该线程堆栈分配的地址空间的近似字节数,在某些平台上,指定一个较高的 stackSize 参数值可能使线程在抛出 StackOverflowError 之前达到较大的递归深度,如果指定一个较低的值将允许较多的线程并发地存在,且不会抛出 OutOfMemoryError(或其他内部错误)stackSize 参数(如果有)的作用具有高度的平台依赖性,某些平台这个值都可能被忽略如果这个值设置为0表示忽略设置。所以,对于stackSize可以进行设置,如果不设置默认是0,表示忽略该参数的设置,使用平台默认值。

1.3 AccessControlContext acc

注:该参数表示访问控制权限,了解 AccessControlContext 参考 Java安全模式 (暂不考虑)

在jdk1.7版本中,该参数在所有构造中都是不传的,会在init方法中有默认值。

而在1.8版本中,新增了一个构造方法,可以指定AccessControlContext ,为什么增加该方法以及如何使用暂不了解。

1.4  boolean inheritThreadLocals

注:该参数表示,是否从构造线程(父线程 Thread parent = currentThread())中继承线程局部变量的初始值

只有在这个jdk1.8新增的方法中,才会指定为false,一般默认为ture。

对于成员变量 ThreadLocal.ThreadLocalMap inheritableThreadLocals,表示的是与这个线程相关的InheritableThreadLocal值。这张地图是由InheritableThreadLocal类维护。

也就是说默认情况下(该参数为true),假如父线程使用InheritableThreadLocal维护了一个ThreadLocalMap inheritableThreadLocals,那么其子线程是可以继承map中的初始值的(InheritableThreadLocal 与 ThreadLocal 的介绍可以参考另一文章)

over~ 部分内容转载于https://www.cnblogs.com/noteless/p/10354753.html,推荐该文,非常详细。

 

Coze智能体开发:开始使用扣子 扣子全新升级!它不仅能帮你办公、做视频、写代码,更具备自主任务执行、探索进化等能力,真正从“陪你聊”走向“帮你干活”。 阅读详情

相关推荐

实战STM32G0驱动DRV8870/AT8870:PWM+DMA精准调速与H桥衰减模式详解

本文详细介绍了如何使用STM32G0单片机结合DRV8870/AT8870电机驱动芯片实现直流有刷电机的精准控制。重点讲解了PWM与DMA结合实现高效调速的硬件配置与软件驱动方法,并深入剖析了H桥快衰减与慢衰减模式的工作原理及应用场景,为嵌入式电机控制项目提供了完整的实战解决方案。

c7d8e9的博客 598

java parameters 用法_java11教程--类AccessControlContext用法

AccessControlContext用于根据其封装的上下文做出系统资源访问决策。更具体地说,它封装了一个上下文,并且有一个方法, checkPermission ,相当于AccessController类中的checkPermission方法,但有一点不同:AccessControlContext checkPermission方法根据它封装的上下文而不是当前执行线程。因此,AccessCon...

weixin_31986143的博客 581

TI理想二极管在冗余电源中应用实例

深入探讨理想二极管如何提升冗余电源系统的效率与可靠性,通过实际应用案例展示其在电流隔离和自动切换中的优势,帮助工程师优化电源架构设计。

weixin_30653091的博客 993

java thread参数_Java Thread构造参数源码详细介绍

Thread类是一个构建线程的关键类,通过传递一个实现了Runnable接口的类就可以简单构造出一个线程对象,下面就来看看有关Thread类的一些基础知识点吧(本文略长请耐心阅读,相信你一定受益匪浅)。Thread一共有8种(public修饰)构造函数和一种(default修饰)默认构造函数,分别如下所示:public Thread() {init(null, null, "Thread-" + ...

weixin_36466165的博客 467

NVIDIA Tao Toolkit环境配置踩坑

请搭配食用该文章为 Tao 安装中可能出现的问题进行解答,如果存在本文章中没出现的问题,欢迎提问,由我复现后更新文章。由于大部分云服务器厂商不能支持 docker,因此我使用的环境为2023年5月27日在平台租的 3080 旧版环境进行实验。

qq_36630208的博客 772

PCB设计必看:铜皮厚度与载流能力对照表(附Excel计算工具)

本文深入解析了PCB设计中铜皮厚度与载流能力的核心关系,提供了基于IPC-2152标准的动态计算逻辑与实用Excel工具。文章不仅分享了载流对照表,更重点剖析了影响载流能力的关键因素(如铜厚、线宽、温升、布线层),并给出了高电流设计的实战技巧与测试验证方法,帮助工程师规避常见陷阱,实现从理论到实践的闭环设计。

weixin_29228781的博客 727

Java之AccessController安全模型

目录一、JDK的安全模型1.1 JDK1.0 安全模型1.2 JDK1.1 安全模型1.3 JDK 1.2 安全模型1.4 最新安全模型二、AccessController2.1 方法摘要 作为一种诞生于互联网兴起时代的语言,Java从一开始就带有安全上的考虑,如何保证通过互联网下载到本地的Java程序是安全的,如何对Java程序访问本地资源权限进行有限授权,这些安全角度的考虑一开始就影响到Java语言的设计与实现。可以说Java在这些方面的探索与经验,对后来的一些语言与产品都带来了积极影响。 一、JDK的

we.think 1047

Claude Code 100个真实案例 - 用AI设计Arduino PCB电路板(硬件小白也能画板)

本案例展示如何使用 Claude Code 配合 KiCad 的 Python 脚本接口,从零设计一块 Arduino 传感器扩展板 PCB。从原理图符号创建、网表生成到 PCB 布局布线,全程自动化完成,最终输出可直接发给工厂打样的 Gerber 文件。

yueyeguzhuo的专栏 447

[源码解析]AccessController

本篇文章是我解析Java-API的笔记,更多的是从方法着手,少对类的整体情况进行说明,故并不详尽,可供大家参考。 如果文中阐述不全或不对的,多多交流。

进步*于辰的博客 1万+

【FPGA教程案例55】深度学习案例2——基于FPGA的CNN卷积神经网络之ReLu激活层verilog实现

在本课程中,我们将对CNN的ReLu函数模块的FPGA实现做详细的介绍和学习。从仿真结果可知,通过Rule激活函数之后,小于的输入数据输出为0,否则输出是输入本身。,我们对CNN的基本原理有了初步认识。ReLu函数具备如下优缺点。按照课程1相似的操作方式。

FPGA/MATLAB学习教程/源码/项目合作开发 2694

【网络基础2】路由器的 “两扇门”:二层接口和三层接口到底有啥不一样?

家里的路由器背后总有几个网线接口,有的标着 “LAN”,有的标着 “WAN”;公司机房的路由器上,接口更是五花八门,有的插着网线,有的连着光纤,旁边还贴着 “GE0/0/1”“Eth-Trunk1” 这样的标签。你可能会想:不就是插网线的地方吗?有啥区别?其实,这些接口分 “二层接口” 和 “三层接口”,它们的作用差得远了 —— 就像你家的门,有的是 “小区内的单元门”(只通小区内部),有的是 “小区的大门”(能通往外面的世界)。接下来,咱们用大白话 + 生活例子,一点点把这两种接口讲透。

jundao1997的专栏 570

java并发之Thread

线程的状态 线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)。 当需要新起一个线程来执行某个子任务时,就创建了一个线程。但是线程创建之后,不会立即进入就绪状态,因为线程的运行需要一些条件(比如内存资源,在前面的JVM

gongpulin的博客 1391

毕设帮扶:从0到1搭建基于YOLOv5的打架斗殴检测系统——助你搞定深度学习毕设

做完这个毕设,你已经掌握了从数据准备到模型部署、界面开发的全流程。把模型部署到边缘设备(如安防摄像头的嵌入式系统)上,实现本地化实时检测与报警;加入行为严重程度分析(如轻微推搡 vs 严重斗殴)、涉事人员数量统计,让系统从“检测”升级为“智能安防决策”;尝试融合声音、红外等多模态数据,打造全方位的暴力事件监测系统。按照这个教程一步步做,你的毕设肯定能做得很扎实。要是过程中遇到啥问题,别担心,慢慢梳理或者咱们一起聊聊,一定能把这个毕设做成你满意的作品。

LXY_LOVE36的博客 123

多线程,Thread构造方法源码简介

Java中Thread类是构造线程的一个关键类,正确创建一个线程,意味着如何构造一个正确的线程对象,因此对线程对象的构造就不得不对Thread类构造函数源码进行分析,以下是本人的一些拙见,若有不对之处,望各位大佬勿喷! 首先我们来看一下Thread类源码中的构造函数: 乍一看有8个被public修饰的和1个被default修饰的构造函数,一些javaer不禁感叹这我哪儿记得住啊!不要急,我们从源码中可以看到每个构造函数调用了一个init方法,所以我们了解Thread构造方法的根源就查看init方法是

weixin_45370069的博客 197

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

手撕Java系列-Thread详解,Thread源码解读,Thread核心方法,Thread安全问题,Thread用到的设计模式

手撕Java系列-Thread详解,Thread源码解读,Thread核心方法,Thread安全问题,Thread用到的设计模式

横竖撇折点 1656

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Thread.currentThread().getName()与this.getName()的区别

一:代码示例 创建继承Thread类的CountOperate package com.kgf.test; public class CountOperate extends Thread { public CountOperate() { System.out.println("CountOperate---begin"); System.out.println("T...

花&败 3297

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java Thread类源码解析(1)

四参数构造方法,调用私有构造方法,其中AccessControlContext参数默认为null,inheritThreadLocals参数默认为True。二参数构造方法,调用四参数构造方法,其中ThreadGroup参数默认为null,stackSize默认为0。二参数构造方法,调用四参数构造方法,其中target参数默认为null,stackSize默认为0。五参数构造方法,调用私有构造方法,其中AccessControlContext参数默认为null。三参数构造方法,调用四参数构造方法。

lord_huang的博客 794

Thread源码流程

Thread 构造函数 //无参 Thread() //传入Runnable接口实现 Thread(Runnable target) //传入Runnable接口实现,传入线程名 Thread(Runnable target, String name) //设置当前线程用户组 Thread(ThreadGroup group, Runnable target) //设置用户组,传入线程名 Thread(ThreadGroup group, Runnable target, String name) //设

W1nk的博客 182

并发编程基础 之 Thread 与ThreadGroup的介绍(api介绍)

一.Thread 和ThreadGroup的关系 因为Thread的构造函数中有关于ThradGroup的,所以了解它们之间的关系是有必要的。ThradGroup之间的关系是树的关系,而Thread与ThradGroup的关系就像元素与集合的关系。关系如下: ├─ ThreadGroup[name=system,maxpri=10] │ ├─Thread[Reference Handler...

博客简介 1436

java thread 源代码_Java多线程学习(一)——Thread类源码

概述创建线程的方法常用的有两种,一个是继承Thread类,另一个是实现Runnable接口,然后用Runnable对象创建Thread类。所以在日常使用过程中,不可避免的使用Thread类,本文通过查看Thread类源码的方式,查看Thread类的方法,以及方法的实现原理。构造方法自己阅读源码的方式通常是从构造方法看起,里面会进行一些成员变量的初始化,有些是值得注意的。无参构造为什么默认的线程名会...

weixin_35102377的博客 365

Java多线程(Thread)详解之启动与中断

这篇博客主要对Thread类进行介绍,然后分享一下自己对start()和 interrupt()的理解。中断线程。public static boolean interrupted()和public boolean isInterrupted()对标志位的影响。

关关的博客 1807

你执行的是run方法是Thread类的还是Runnable接口的?

前言 大家面试的时候可能会遇到这样的问题,执行Thread子类的run方法时,如果初始化对象调用的是有参(Runnable runnable)方法,执行的时候执行的究竟是谁的run方法? 前置 在正式思考这个问题之前,我们先看一个简单的例子,相信大多数人在学习java的时候都写过这样的一个例子: package com.example.demo.web; public class Animal { public void sound() { System.out.println(

weixin_43839681的博客 717

22.jdk源码阅读之Thread(上)

Java 中的 Thread 类是多线程编程的基础,也是我们日常工作中用的比较多的类,但是你真的了解它吗?下面这几个问题你是否有思考过?

前端、移动端、后端源码级底层原理分享 856

Thread.currentThread().getName() 和 this.getName() 区别

主要代码片段: 输出的结果:    根据输出的结果来看,子线程的this.getName() 为什么是Thread-0 而不是A?? 1.查看Thread的构造方法,构造方法的target形参对象 currentThread 会传递到 Thread 里的private 类型的属性 target 上。    2.当调用t1.start() 方法时,实际调用的是target对象。 ...

渔 夫 7054

Thread源码解析---创建线程流程、start()之后回调run()方法流程

一、线程的两种创建方式 继承Thread类:通过new MyThread();无参构造方法创建对象;【MyThread是Thread类的继承类】 实现Runnable接口:通过new Thread(new MyThread());有参构造方法创建对象;【MyThread是Runnable接口的实现类】 二、Thread源码创建Thread对象流程 无参构造方法和有参构造方法:两个...

qq_34092585的博客 5001

多线程的this.getName()与Thread.currentThread().getName为何有时不一样

多线程的this.getName()与Thread.currentThread().getName为何有时不一样,多线程的this指向问题

xuanyuexingxuan的博客 650
上一篇: finally和return的执行顺序
下一篇: Thread start/run方法分析
MrMoving
博客等级 码龄10年 54粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值