Java Thread(Android Nougat源码)

Android 7系统异常问题排查(十)实战—异常问题定位方法论 要点说明重启类问题优先抓 pstore重启后 logcat 缓冲区已丢失,只有 pstore 保留内核日志进程名 + 函数名 = 关键线索mmcqd/0→ eMMC 驱动,→ 块设备请求处理随机问题考虑时序/环境如果 100% 复现,可能是代码逻辑错误;如果随机,可能是硬件/时序问题要点说明主线程 Native 状态大多与 Binder 相关跨进程同步调用是主线程阻塞的常见原因跨进程 ANR 需要分析多进程不仅要看 ANR 的 App,还要看对端服务。 阅读详情
相关文件路径
./libcore/ojluni/src/main/java/java/lang/Thread.java
./libcore/ojluni/src/main/java/java/lang/ThreadGroup.java
./libcore/ojluni/src/main/java/sun/misc/Unsafe.java
./art/runtime/native/java_lang_Thread.cc
./art/runtime/thread_state.h
./art/runtime/thread.cc
./art/runtime/thread.h
./art/runtime/scoped_thread_state_change-inl.h
./art/runtime/native/scoped_fast_native_object_access.h
./art/runtime/scoped_thread_state_change.h
./art/runtime/well_known_classes.cc

概述:

线程是程序的一个可调度执行单元.每个线程都有线程名(可能重名),有优先级,可以是守护或非守护线程; 虚拟机刚启动时,是非守护的线程.

线程优先级(1-10):
数字越大,优先级越高

线程退出条件,满足下面任一:
1.Runtime类的exit调用,并且安全管理允许exit操作
2.从调用run函数返回或抛出exception到run方法范围之外

创建新线程执行单元的两种方式:
1. 继承Thread,直接调用对象的start;
2. 实现Runnable接口,把对象作为参数传入Thread;
一般情况下,选择第1种方式,当需要线程状态信息时,可以方便获取.
但是,当只是作为执行单元,而线程实体由其他提供时(如线程池ThreadPoolExecutor),则应用第2种

成员变量

成员变量说明
lock同步对象,职责是保护此线程的join/sleep/park操作(park暂停)
nativePeernative对应的线程,此值非空(null),表示线程存活
threadQ(没见使用)
daemon是否为守护进程
target执行代码单元
group此线程所在组
stackSize请求栈大小,等于0则由VM决定
tid线程id,表示线程中的第几个子线程
threadLocals本线程相关的ThreadLocalMap;会由ThreadLocal类来调用赋值
inheritableThreadLocals可以由父子线程继承的ThreadLocalMap;由父线程传递下来,并可以传递到子线程
parkBlocker提供给java.util.concurrent.locks.LockSupport使用 ??????
blocker如果存在此对象,则线程可以被可中断的I/O操作阻塞;在设置这个线程的中断状态后,blocker的interrupt方法应该被调用;主要用于NIO中
blockerLock中断锁,保护blocker
uncaughtExceptionHandler非空(null),则优先于defaultUncaughtExceptionHandler处理;
defaultUncaughtExceptionHandlerstatic ,类变量
threadLocalRandomSeed用于java.util.concurrent.ThreadLocalRandom,并发时生成高效的伪随机数(PRNG)
threadLocalRandomProbe用于java.util.concurrent.ThreadLocalRandom,并发时生成高效的伪随机数(PRNG)
threadLocalRandomSecondarySeed用于java.util.concurrent.ThreadLocalRandom,并发时生成高效的伪随机数(PRNG)
parkState线程是否停止[park]运行(不是终止[terminate]);用于并发控制;默认ParkState.UNPARKED

类变量

类变量说明
defaultUncaughtExceptionHandler进程中线程的未捕获异常默认处理
threadInitNumber用于线程名
threadSeqNumber进程中子线程数

线程状态

State

线程状态此为JVM的线程状态,并不能反映操作系统的线程状态
NEWThread对象new出来了,但没有start
RUNNABLE可执行状态,表示可以被JVM调度或正在执行
BLOCKED等待监控锁;等待进入或重进入(Object.wait)同步块或方法
WAITING线程进入WAITING状态由于调用如下方法:Object.wait无超时时间;Thread.join无超时时间LockSupport.park;线程进入WAITING状态等待其他线程执行特殊活动
TIMED_WAITING指定等待时间的等待线程;进入此状态由于调用如下方法指定了正的等待时间:Thread.sleep;Object.wait 有超时;Thread.join 有超时;LockSupport.parkNanos;LockSupport.parkUntil
TERMINATED线程已经执行完

内部静态类

Thread.ParkState

成员:
UNPARKED: 未停止
PREEMPTIVELY_UNPARKED: 状态机是PARKED<—>UNPARKED<—>PREEMPTIVELY_UNPARKED
PARKED: 停止状态
第 18 章:ART 运行时 Android运行时(ART)是Android应用的执行环境,负责加载和执行DEX字节码。ART通过多层级编译策略(解释器、JIT、AOT)和并发垃圾回收(如CC和CMC收集器)优化性能。关键组件包括类链接器、dex2oat编译器、JIT编译器和内存管理系统。ART支持模块化更新,并通过配置文件引导优化(PGO)提升应用性能。调试能力基于JVMTI,提供断点、类重定义等功能。Android 17引入了多项改进,如分代标记-压缩GC、禁止反射修改static final字段、DEX容器格式V41等。ART架构 阅读详情

相关推荐

Android native/C++层Thread线程实现源码分析

在Android native(C++)层若想要创建一个线程则可以使用android平台native实现的Thread类来创建【当然你也可以直接使用C++标准库实现的std::thread,需引入头文件 #include<thread>,后续有时间再分析该标准库的实现】,而该类做了跨平台线程调用接口的处理和封装,具备了跨平台运行能力。 在native层使用该类必须引用android命名空间,因为该类是在android命名空间实现的,并引用该头文件【system/core/libutils/include/u

CloverLHao的博客 3367

android 打印所有JAVA应用调用java.net.socket 创建socket、关闭socket、线程、本地端口、远端端口信息的方法

基于android 11的debug patch。在socket.java里面增加LOG打印,打印所有使用过socket.java创建、关闭的socket本地与远端端口。可以通过persist.debug.logging_socket 属性控制是否打印。

漂流瓶の海岸 455

Android热修复原理(一)热修复框架对比和代码修复

相关文章 解析ClassLoader系列 前言 在Android应用开发中,热修复技术被越来越多的开发者所使用,也出现了很多热修复框架,比如:AndFix、Tinker、Dexposed和Nuwa等等。如果只是会这些热修复框架的使用那意义并不大,我们还需要了解它们的原理,这样不管热修复框架如何变化,只要基本原理不变,我们就可以很快的掌握它们。这一个系列不会对某些热修复框架源码进行解析,...

Android进阶三部曲 - 刘望舒 5万+

Android7 so库加载流程梳理

Java层通过System.load或System.loadLibrary来加载一个so文件,它的定义在Android源码中的路径为libcore/ojluni/src/main/java/java/lang/System.java,执行流程如下: 接下来,让我们具体看下System.loadLibrary这个方法的实现。 /** * Loads the system library specified by the <code>libname</code&g

ngRoom 2009

拼多多Android面试题及参考答案

Android 系统采用分层架构设计,从底层到上层依次为Linux 内核层硬件抽象层(HAL)系统运行时库层应用框架层应用层,共五层。位置:Linux 内核层与系统运行时库层之间,是“硬件与系统的隔离层”。核心作用:屏蔽硬件差异,为上层提供统一的硬件访问接口,解决 Android 开源与硬件厂商闭源的矛盾,具体功能如下:硬件能力抽象:将硬件的具体实现(如不同厂商的摄像头芯片、音频芯片)封装为标准化接口(如Camera HALAudio HAL。

大模型大数据攻城狮的专栏 1285

Android 7.1.1源码(Nougat)

安卓7.1.1源码,个人路径下有安卓各版本的源码下载链接。

Android 9.0 System.loadLibrary 的源码解析

本文主要讲解下Android 9.0 System.loadLibrary 的源码实现。 源码分析 libcore/ojluni/src/main/java/java/lang/System.java public static void loadLibrary(String libname) { Runtime.getRuntime().loadLibrary0(VMStack.getC...

张小强的专栏 3455

GPU大规模集群运维

CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的通用并行计算平台和程序模型,该架构使GPU能够解决复杂的计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。开发人员可以使用C语言来为CUDA架构编写程序,所编写出的程序可以在支持CUDA的处理器上以超高性能运行。CUDA官方文档CUDA的软件环境允许开发者使用C++等高级编程语言开发程序。

weixin_42795092的博客 1740

Android 7.0 Nougat(牛轧糖)---对开发者来说

android 7.0出来了。让你的app准备迎接最新的android版本吧,支持节省电量和内存,这样新的系统行为。使用多窗口UI、直接恢复通知以及其他操作来扩展你的app。 android 7.0介绍了各种各样的新功能给用户和开发者, 本文重点介绍面向开发者的一些新功能。 确保检查android 7.0的行为变化,了解有关平台的变化可能会影响你的app。 如果要了解更多的关于用户的新功能,

有酒平步上青天 8425

如何在INCA中修改标定量的初始值,并刷回控制器

测试过程中,有些时候,标定量来不及修改,这就需要修改标定量的初始值了,又不想打开模型重新编译,因此直接在INCA中修改,然后再刷回控制器,就成了最佳选择,之前也学过,长时间不用,忘记怎么搞了,最近又用到了,这次记录一下,以后用到的时候,就不用在网上东翻西找了。截止到2023年11月24日,共找到了两种方法可以实现修改。

weixin_43406519的博客 4204

手把手教你解决COLMAP编译中的Ceres CUDA支持问题(附详细配置步骤)

本文详细解析了COLMAP编译中Ceres CUDA支持问题的完整解决方案,包括环境准备、Ceres Solver的CUDA编译配置、COLMAP的CUDA集成配置等关键步骤。通过优化CMake参数和解决常见错误,帮助技术人员充分利用GPU加速优势,提升三维重建效率。

vodka的博客 862

Framework定制-在JAVA核心库中移植Android Log

java log

weixin_44348983的博客 740

达梦慢sql和统计信息收集

各计划节点的执行顺序为:缩进越多的越先执行,同样缩进的上面的先执行,下面的后执行,上下的优先级高于内外。在建立索引的时候,要考虑索引的最左匹配原则(在使用 SQL 语句时,如果 where 部分的条件不符合最左匹配原则,可能导致索引失效,或者不能完全发挥建立的索引的功效);执行计划是 SQL 语句的执行方式,由查询优化器为语句设计的执行方式,交给执行器去执行。生产系统中,对于频繁变动的数据表,多次执行计划可能会出现不一致的问题,这往往是由于统计信息不准导致的,索引定期收集统计信息就很有必要了。

m0_37680131的博客 1715

Android7 U盘插拔链路源码全解析(七)应用层MediaScanner与SAF

本文分析了Android系统中应用层如何访问U盘文件的关键机制。主要内容包括: 权限模型:通过FUSE实现权限控制,将原始挂载点/mnt/media_rw/Udisk重新映射为不同权限级别的访问路径。 MediaScanner流程: 接收ACTION_MEDIA_MOUNTED广播触发扫描 递归扫描目录,跳过含.nomedia文件的目录 根据文件扩展名识别媒体类型 提取音频等文件的元数据(如ID3标签) 将结果写入MediaStore数据库 版本差异:Android 7及之前版本应用可直接通过路径访问U盘文

AfinalStone的专栏 280

MaixCAM2 4K AI相机硬件解析与开发实战

嵌入式AI视觉开发中,边缘计算设备的选择直接影响项目落地效果。以NPU为核心的AI加速技术通过专用指令集优化,可在低功耗下实现10+TOPS算力,典型应用包括工业质检、智能门禁等实时场景。MaixCAM2作为新一代4K AI相机,搭载AX630 SoC芯片,其双核Cortex-A53与NPU的异构架构,在运行YOLOv11n模型时可达113FPS,显著优于传统方案。开发时需注意模型量化部署技巧,如INT8量化需500+张校准图片覆盖多光照条件,避免准确率下降。设备扩展性方面,PMOD接口支持热成像、ToF传

weixin_30819085的博客 691

YOLO11优化:特征融合 | 金字塔稀疏 Transformer(PST)——一个轻量级、即插即用的模块 | 25年7月最新成果

我们提出金字塔稀疏 Transformer(PST)——一个轻量级、即插即用的模块,通过由粗到细的 token 选择机制和共享注意力参数,在大幅降低计算量的同时保留空间细节。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1063

Android7 U盘插拔链路源码全解析(四)Framework层(上) UsbHostManager

摘要 本文是Android USB设备管理系列第四篇,聚焦Framework层的UsbHostManager机制。文章基于Android 7.1.2源码,详细分析了USB设备感知链路的实现: 初始化流程:从SystemServer启动UsbService,到条件创建UsbHostManager(需FEATURE_USB_HOST支持),再到systemReady阶段启动JNI监听线程。 核心设计: 采用分段回调模式构建设备树(begin→add配置→add接口→add端点→end) 设备信息通过HashMa

AfinalStone的专栏 405

【51单片机仿真】基于51单片机设计的温湿度采集检测系统__资料编号11

该系统通过与AT89C51单片机、LCD1602显示屏和DHT11温湿度传感器的集成,实时读取环境中的温度和湿度数据并在LCD1602上显示这些信息,其中系统初始化LCD1602显示屏、通过DHT11_receive()函数接收并校验DHT11传感器的温湿度数据、使用LCD_ShowNum()函数逐位显示湿度和温度数据并在这些数据后附加相应的单位符号,以便用户可以直观地看到当前环境的温湿度情况。

嵌入式阿齐Archie 2万+

Android系统证书静默安装:MoveCertificate模块原理与实现

HTTPS通信依赖于CA根证书建立信任链,Android系统通过安全沙箱隔离用户与系统证书存储区,确保设备安全。系统证书存储在只读分区,普通应用无法直接写入,这构成了企业设备批量部署内部CA证书的核心技术壁垒。传统方案依赖系统签名权限,面临生态碎片化与兼容性挑战。MoveCertificate模块采用系统层服务设计,在构建时集成到系统镜像,以系统权限在设备启动时自动完成证书部署,实现全局信任。该方案适用于企业设备预装、定制ROM等场景,通过规避应用层权限限制,解决了Android生态中长期存在的证书管理难题

weixin_33802505的博客 425

PyTorch生成式人工智能(7)——生成对抗网络(Generative Adversarial Network, GAN)实践详解

生成对抗网络 (Generative Adversarial Network, GAN) 最早由 Ian Goodfellow 于 2014 年提出,其中生成器试图创建与真实样本无法区分的数据样本,而判别器则试图区分生成器生成的样本与真实样本。在本节中,我们将介绍 GAN 的理论基础。然后,介绍如何使用 PyTorch 从零开始构建 GAN,以便了解所有细节,深入理解 GAN 的内部工作原理,为后续讨论 GAN 的其他更高级内容奠定基础,比如生成高分辨率图像或逼真的音乐。

盼小辉丶的博客 1万+

计算机控制技术及应用

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

2017年欢聚时代Android校招笔试题型深度复盘

Android开发进阶不仅要求掌握四大组件的使用,更需要对底层原理有系统认知。例如,Binder作为Android IPC的核心机制,通过mmap实现一次拷贝,保障跨进程通信的性能与安全;Handler消息机制则通过Looper与MessageQueue驱动主线程任务调度。性能优化中的内存泄漏、布局绘制等问题,直接影响应用用户体验。这些知识点在移动互联网时代成为Android工程师校招笔试的高频考点。本文基于欢聚时代2017年Android校招笔试A卷,复盘其题型结构与考察重点,涵盖Java基础、并发、四大

weixin_34248023的博客 443

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

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

Android内存管理与性能优化面试真题

概念解析:LRU算法的⼯程实现 LruCache(Least Recently Used,最近最少使⽤)是Android提供的⼀个核⼼缓存⼯具类。它的设计理念⾮常符合⼈类直觉:“如果⼀个数据最近被访问过,那么它在未来被访问的概率12 / 38极⾼;反之,如果⼀个数据很久没被碰过,当内存吃紧时,它就应该第⼀个被踢出局。” 在源码层⾯,LruCache 的底层⼼脏是⼀个 LinkedHashMap。

qq_52269550的博客 689

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java和Android的Thread源码分析

首先看一下Thread的类和状态public class Thread implements Runnable { ..... /** * A representation of a thread's state. A given thread may only be in one * state at a time. */ public enu

android_Text的专栏 1886

向word模板中写入数据_在access中把文字写入到word

前面分享过在access中添加表格到word中。下面代码通过typetext方法把数据添加到word中 Dim WdApp As Word.Application Dim WdDoc As Word.Document Dim StrAdr As String StrAdr = CurrentProject.Path & "文档1.docx" Set WdA...

weixin_39659748的博客 704

Android/java 多线程(一)-Thread的使用以及源码分析

线程的概念以及状态 在学习线程之前,我们需要普及一个概念,每一个程序运行都会有一个父进程,我们的线程就是在此父进程中运行,拿Android来说,默认情况下,启动一个程序,所有的组件程序都运行在同一个进程中,并且会创建一个执行线程在该进程中,俗称"主线程",当我们在该线程中做了耗时的操作造成了程序卡顿,我们就叫“线程阻塞”了,此时就应该另起一个线程来执行耗时操作。 要了解线程中方法的使用,就得先了解...

黄杰的博客 341

android jni dlopen,[原创]andorid linker 解读1----从loadLibrary到dlopen

Android 版本:android-8.0.0_r4目的[x] elf的加载过程[x] 在so加载过程中确定依赖库先被调用construct 还是后调用。[x] elf 重定位过程做了什么?过程System.loadLibrary源码位于:./libcore/ojluni/src/main/java/java/lang/System.java可以看到然后又调用了Runtime.java的load...

weixin_28314575的博客 591
上一篇: View的Touch事件分发简要流程
下一篇: android.os.SystemClock类
ProgramResearch
博客等级 码龄11年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值