Thread 类中的start() 和 run() 方法有什么区别?
在 Java 中,Thread
类的 start()
方法和 run()
方法有着重要的区别,理解这两者的区别对于正确使用多线程编程至关重要。
start()
方法:
start()
方法是用来启动一个新线程的。当你调用 start()
方法时,JVM 会创建一个新的线程,并调用该线程的 run()
方法。start()
方法后,新的线程会并发执行,而调用 start()
方法的线程(通常是主线程)会继续执行。start()
方法来执行 run()
方法,因为这样会导致 run()
方法在当前线程中执行,而不是在新线程中执行。示例:
Thread thread = new Thread(new MyRunnable());
thread.start(); // 启动新线程
run()
方法:
run()
方法是线程的执行体,包含了线程执行的代码。当你直接调用 run()
方法时,它不会启动新线程,而是会在当前线程中执行 run()
方法的代码。run()
方法就像调用普通的方法一样,不会创建新的线程。示例:
Thread thread = new Thread(new MyRunnable());
thread.run(); // 在当前线程中执行,不会启动新线程
start()
方法来启动一个新线程,run()
方法会在新线程中执行。run()
方法会在当前线程中执行,不会创建新线程。因此,正确的使用方式是始终通过 start()
方法来启动线程,而不是直接调用 run()
方法。