package test;
public class ThreadTest {
public static void main(String[] args) {
System.out.println("[main] execute");
MyThread myThread = new MyThread();
myThread.start();
}
}
class MyThread extends Thread{
@Override
public void run() {
System.out.println("[thread] execute RUN");
}
public void start() {
System.out.println("[method] execute RUN");
}
}
笔者最近遇到一个面试题,疏忽大意,写错了,考的时主线程和新建线程的执行顺序
[main] execute
[method] execute RUN
main 方法中,遇到的第一个执行语句,属于main主线程的范畴,所以执行[main] execute
紧接着遇到MyThread,这个时候,面试题可要仔细了,MyThread重新定义了start()方法
而这时调用start()方法不等于启动线程,而只是调用一个普通方法而已,所以没有执行run()方法,
如果没有没有定义start()方法,就会调用run()方法