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 参数的作用具有高度的平台依赖性,某些平台这个值都可能被忽略