Thread 构造方法详解

1,构造方法总览

public Thread();
public Thread(Runnable target);
public Thread(String name);
public Thread(Runnable target, String name); // 最常用
public Thread(ThreadGroup group, Runnable target);
public Thread(ThreadGroup group, String name);
public Thread(ThreadGroup group, Runnable target, String name);
public Thread(ThreadGroup group, Runnable target, String name,  long stackSize);
复制代码
  • Runnable target:实现 Runnable 的实现类或继承了 Thread 的子类(Thread 也实现了 Runnable 接口)
  • String name:线程的名字
  • ThreadGroup group:当前建立的线程所属的 线程组
  • long stackSize:线程栈的大小,此处只做粗略解释,因跟 JVM 有关系

2,详解

注:所有构造函数底层都调用了 init 方法,进行初始化,也可以说,Thread 只有一个构造函数,关于 init 后续会细讲

public Thread() {
	init(null, null, "Thread-" + nextThreadNum(), 0);
}
/*
 * 第一个参数为 ThreadGroup
 * 第二个参数为 Runnable
 * 第三个参数为 name
 * 第四个参数为 stackSize
 */
复制代码

ThreadGroup :当此参数为 null 时,会将此线程设置到父线程的 ThreadGroup 里面。

Thread parent = currentThread(); // 获取到父线程的 ThreadGroup

// 将此线程设置到父线程的 ThreadGroup
if (g == null) {
  g = parent.getThreadGroup();
}
复制代码

Runnable:当此参数为 null 时,此线程什么都不做

@Override
public void run() {
   if (target != null) {
       target.run();
   }
}
// 要让线程拥有任务并执行,1:通过构造器传入 Runnable 实例,2:重写 run 方法
复制代码

name:当此参数为 null 时,那么会拥有一个默认的名字,命名方式为 Thread-从0递增的数字

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

/* For autonumbering anonymous threads. */
private static int threadInitNumber;
private static synchronized int nextThreadNum() {
  return threadInitNumber++;
}
复制代码

stackSize:此参数如果为空,默认值为0,表示忽略该参数 –> stackSize 参数的作用具有高度的平台依赖性,某些平台这个值都可能被忽略

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享