Thread
类是Java中用于创建和管理线程的核心类。它位于
java.lang
包中,提供了创建、启动、中断和管理线程的方法。
1.Thread源码解读
1.1. 类定义
Thread
类继承自Object
类,并实现了Runnable
接口。此外,它还实现了Serializable
接口,允许线程对象被序列化。
public class Thread implements Runnable {
// ...
}
1.2. 构造方法
Thread()
: 创建一个新的线程。Thread(Runnable target)
: 创建一个新线程并指定要运行的目标(即实现Runnable
接口的对象)。Thread(Runnable target, String name)
: 创建一个新线程并指定要运行的目标和名称。Thread(String name)
: 创建一个新线程并指定名称。Thread(ThreadGroup group, Runnable target)
: 创建一个新线程并指定线程组和要运行的目标。Thread(ThreadGroup group, Runnable target, String name)
: 创建一个新线程并指定线程组、要运行的目标和名称。Thread(ThreadGroup group, Runnable target, String name, long stackSize)
: 创建一个新线程并指定线程组、要运行的目标、名称和堆栈大小。
1.3. 初始化方法
init
方法是所有构造方法调用的共同入口点,负责初始化线程的各种属性。
private void init(ThreadGroup g, Runnable target, String name,
long stackSize, AccessControlContext acc,
boolean inheritThreadLocals) {
if (name == null) {
throw new NullPointerException("name cannot be null");
}
this.name = name;
this.target = target;
// 继承父线程的线程组
Thread parent = currentThread();
SecurityManager security = System.getSecurityManager();
if (g == null) {
if (security != null) {
g = security.getThreadGroup();
}
if (g == null) {
g = parent.getThreadGroup();
}
}
// 检查访问权限
g.checkAccess();
// 检查线程数限制
if (g != null && !g.isDestroyed()) {
g.addUnstarted();
}
this.group = g;
this.daemon = parent.isDaemon();
this.priority = parent.getPriority();
if (security == null || isCCLOverridden(getClass())) {
this.contextClassLoader = parent.getContextClassLoader();
} else {
this.contextClassLoader = AccessController.doPrivileged(
new PrivilegedAction<>() {
public ClassLoader run() {
return parent.getContextClassLoader();
}
}, acc);
}
this.inheritedAccessControlContext =
acc != null ? acc : AccessController.getContext();
this.stackSize = stackSize;
// 设置ID
tid = nextThreadID()