java thread 源代码_Java读源码之Thread

前言JDK版本:1.8阅读了Object的源码,wait和notify方法与线程联系紧密,而且多线程已经是必备知识,那保持习惯,就从多线程的源头Thread类开始读起吧。由于该类比较长,只读重要部分源码类声明和重要属性package java.lang;public class Thread implements Runnable {private volatile String name;// ...
摘要由CSDN通过智能技术生成

前言

JDK版本:1.8

阅读了Object的源码,wait和notify方法与线程联系紧密,而且多线程已经是必备知识,那保持习惯,就从多线程的源头Thread类开始读起吧。由于该类比较长,只读重要部分

源码

类声明和重要属性

package java.lang;

public class Thread implements Runnable {

private volatile String name;

// 优先级

private int priority;

//是否后台

private boolean daemon = false;

/* JVM state */

private boolean stillborn = false;

// 要跑的任务

private Runnable target;

// 线程组

private ThreadGroup group;

// 上下文加载器

private ClassLoader contextClassLoader;

// 权限控制上下文

private AccessControlContext inheritedAccessControlContext;

// 线程默认名字“Thread-{ { threadInitNumber }}”

private static int threadInitNumber;

// 线程本地局部变量,每个线程拥有各自独立的副本

ThreadLocal.ThreadLocalMap threadLocals = null;

// 有时候线程本地局部变量需要被子线程继承

ThreadLocal.ThreadLocalMap inheritableThreadLocals = null;

// 线程初始化时申请的JVM栈大小

private long stackSize;

// 线程ID

private long tid;

// 线程init之后的ID

private static long threadSeqNumber;

// 0就是线程还处于NEW状态,没start

private volatile int threadStatus = 0;

// 给LockSupport.park用的需要竞争的对象

volatile Object parkBlocker;

// 给中断用的需要竞争的对象

private volatile Interruptible blocker;

// 线程最小优先级

public final static int MIN_PRIORITY = 1;

// 线程默认优先级

public final static int NORM_PRIORITY = 5;

// 线程最大优先级

public final static int MAX_PRIORITY = 10;

Java线程有几种状态?

// Thread类中的枚举

public enum State {

// 线程刚创建出来还没start

NEW,

// 线程在JVM中运行了,需要去竞争资源,例如CPU

RUNNABLE,

// 线程等待获取对象监视器锁,损被别人拿着就阻塞

BLOCKED,

// 线程进入等待池了,等待觉醒

WAITING,

// 指定了超时时间

TIMED_WAITING,

// 线程终止

TERMINATED;

}

下面这个图可以帮助理解Java线程的生命周期,这个图要会画!面试中被问到,当时画的很不专业,难受!

b2446c2295a83e3d1996b54d89551d03.png

创建

那么线程如何进入初始New状态呢?让我们来看看构造,头皮发麻,怎么有七八个构造,这里只贴了一个

public Thread() {

init(null, null, "Thread-" + nextThreadNum(), 0);

}

还好都是调用init()方法,怕怕的点开了

private void init(ThreadGroup g, Runnable target, String name,

long stackSize, AccessControlContext acc,

boolean inheritThreadLocals) {

if (name == null) {

throw new NullPointerExcept

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值