Java面试题之多线程 线程类的构造方法、静态块是被哪个线程调用的?
在Java中,线程类的构造方法和静态块是由创建该线程的线程调用的。
具体来说:
构造方法:当你创建一个线程对象时,构造方法是在当前线程中执行的。例如,如果你在主线程中创建一个新的线程对象,那么该线程对象的构造方法就是在主线程中被调用的。
public class MyThread extends Thread {
public MyThread() {
System.out.println("构造方法被调用,当前线程:" + Thread.currentThread().getName());
}
public void run() {
System.out.println("run方法被调用,当前线程:" + Thread.currentThread().getName());
}
}
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread(); // 在主线程中调用构造方法
myThread.start(); // 启动新线程
}
}
在上面的代码中,构造方法的输出会显示当前线程是主线程,而 run
方法的输出会显示是新线程。
静态块:静态块是在类被加载时执行的,类的加载是由加载该类的线程完成的。因此,静态块也是由创建该类的线程调用的。
public class MyThread extends Thread {
static {
System.out.println("静态块被调用,当前线程:" + Thread.currentThread().getName());
}
public void run() {
System.out.println("run方法被调用,当前线程:" + Thread.currentThread().getName());
}
}
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread(); // 在主线程中调用构造方法
myThread.start(); // 启动新线程
}
}
在这个例子中,静态块的输出会显示当前线程是主线程,因为类 MyThread
是在主线程中被加载的。
总结:构造方法和静态块都是由创建线程的线程(通常是主线程)调用的。