Java Thread(Android Nougat源码),
分享于 点击 6335 次 点评:139
Java Thread(Android Nougat源码),
相关文件路径 |
---|
./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 |
- 概述
- 成员变量
- 类变量
- 线程状态
- 内部静态类
- ThreadParkState
概述:
线程是程序的一个可调度执行单元.每个线程都有线程名(可能重名),有优先级,可以是守护或非守护线程; 虚拟机刚启动时,是非守护的线程.
线程优先级(1-10):
数字越大,优先级越高
线程退出条件,满足下面任一:
1.Runtime类的exit调用,并且安全管理允许exit操作
2.从调用run函数返回或抛出exception到run方法范围之外
创建新线程执行单元的两种方式:
1. 继承Thread,直接调用对象的start;
2. 实现Runnable接口,把对象作为参数传入Thread;
一般情况下,选择第1种方式,当需要线程状态信息时,可以方便获取.
但是,当只是作为执行单元,而线程实体由其他提供时(如线程池ThreadPoolExecutor),则应用第2种
成员变量
成员变量 | 说明 |
---|---|
lock | 同步对象,职责是保护此线程的join/sleep/park操作(park暂停) |
nativePeer | native对应的线程,此值非空(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处理; |
defaultUncaughtExceptionHandler | static ,类变量 |
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的线程状态,并不能反映操作系统的线程状态 |
---|---|
NEW | Thread对象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: 停止状态
相关文章
- 暂无相关文章
用户点评