第四章 Thread构造函数
文章目录- 文章目录
- 一、构造Thread对象
- 二、thread构造函数stacksize详细讲解
- 三、daemon线程的创建以及使用场景分析
一、构造Thread对象
1、创建线程对象thread,默认有一个线程名,以thread-开头,从0开始计数,构造函数thread()。
2、如果在构造thread的时候没有传递runnable或者没有复写thread的run方法,该thread将不会调用任何东西。如果传递了runnable接口的实例或者复写thread的run方法,则会执行该方法的逻辑单元(逻辑代码)。
3、如果构造线程对象时未传入threadgroup,thread会默认获取线程的threadgroup作为该线程的threadgroup,此时子线程和父线程将在同一个threadgroup中。
public class CreateThread {
public static void main(String[] args) {
Thread t1 = new Thread();
Thread t2 = new Thread() {
@Override
public void run() {
System.out.println(“==========”);
}
};
t1.start();
t2.start();
System.out.println(t1.getName());
System.out.println(t2.getName());
Thread t3 = new Thread("MyName");
Thread t4 = new Thread(() -> {
System.out.println("Runnable...");
});
System.out.println(t3.getName());
System.out.println(t4.getName());
Thread t5 = new Thread(() -> {
System.out.println("Runnable..." + Thread.currentThread().getName());
}, "RunnableThread");
t5.start();
}
}
二、thread构造函数stacksize详细讲解构造thread的时候传入stacksize代表着改线程占用stack大小,如果没有指定stacksize的大小,默认为0,0代表着回忽略改参数,该参数会被JNI函数去试用。
需要注意:改参数有一些平台有效,在有一些平台则无效。
使用-XSS10M设置
案例
public class CreateThread4 {
private static int counter = 1;
public static void main(String[] args) {
Thread t1 = new Thread(null, new Runnable() {
@Override
public void run() {
try {
add(1);
} catch (Error e) {
System.out.println(counter);
}
}
private void add(int i) {
counter++;
add(i + 1);
}
}, "Test", 1 << 24);
t1.start();
}
}
三、daemon线程的创建以及使用场景分析1、JVM虚拟机在只有守护线程运行时会退出;
2、setDaemon方法必须在start方法之前调用。
案例:
public class DaemonThread {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread() {
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName() + " running");
Thread.sleep(100000);
System.out.println(Thread.currentThread().getName() + " done.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}; //new
t.setDaemon(true);
t.start();
Thread.sleep(5_000); //JDK1.7
System.out.println(Thread.currentThread().getName());
}
}



