public class MainClass1 { public static void main(String[] args) { System.out.println("MainClass1 is running in thread: " + Thread.currentThread().getName()); MainClass2.main(args); // 调用另一个类的 main 方法 } } class MainClass2 { public static void main(String[] args) { System.out.println("MainClass2 is running in thread: " + Thread.currentThread().getName()); } }
结果:
MainClass1 is running in thread: main
MainClass2 is running in thread: main
在这个例子中,虽然调用了两个不同类的 main
方法,但它们实际上都运行在同一个线程中(即 "main"
线程)。调用 MainClass2.main(args)
不会创建新的线程,它仅仅是对静态方法的普通调用。
public class MainClass1 {
public static void main(String[] args) {
System.out.println("MainClass1 is running in thread: " + Thread.currentThread().getName());
// 在新线程中执行另一个 main 方法
new Thread(() -> MainClass2.main(args)).start();
}
}
public class MainClass2 {
public static void main(String[] args) {
System.out.println("MainClass2 is running in thread: " + Thread.currentThread().getName());
}
}
3. Spring Boot 应用中的 main
方法
在 Spring Boot 项目中,通常你只有一个 main
方法(启动类中的 main
方法),这个方法用于启动整个应用。Spring Boot 应用的主要工作线程是由主线程启动的,但应用的业务逻辑(如处理 HTTP 请求、异步任务)通常会在其他线程中运行。
通常来说,你不会有多个 main
方法并发执行,即使你定义了多个 main
方法,实际运行时,只有一个 main
方法会在程序启动时由 JVM 作为入口执行。
4. 总结
- 同一个线程:如果你在一个应用程序中从一个
main
方法调用另一个main
方法,它们实际上都在同一个线程中运行(即主线程),除非你显式地创建新线程来执行它们。 - 多线程:要在不同的线程中执行
main
方法或其他任务,必须显式创建新的线程(如使用Thread
或线程池)。 - Spring Boot:Spring Boot 项目启动时,主线程执行
main
方法,但之后的业务逻辑运行通常是由其他线程处理的。