为什么调用start()方法时会执行run()方法,那怎么不直接调用run()方法?
JVM执行start方法,会先创建一个线程,由创建出来的新线程去执行thread的run方法,这才起到多线程的效果。
start()和run()的主要区别如下:
- start方法可以启动一个新线程,run方法只是类的一个普通方法而已,如果直接调用run方法,程序中依然只有主线程这一个线程。
- start方法实现了多线程,而run方法没有实现多线程。
- start不能被重复调用,而run方法可以。
- start方法中的run代码可以不执行完,就继续执行下面的代码,也就是说进行了线程切换。然而,如果直接调用run方法,就必须等待其代码全部执行完才能继续执行下面的代码。
/**
* Created by BaiLi
*/
public class BaiLiDemo {
public static void main(string[] args) {
Thread thread = new Thread(() -> System.out.println(Thread.currentThread().getName()+":一键三连"));
thread.start();
thread.run();
thread.run();
System.out.println(Thread.currentThread().getName()+":一键三连 + 分享");
}
}