Java基本教程之Thread中start()和run()的区别
在Java多线程编程中,我们经常需要创建一个线程对象并调用它的start()方法来启动新的线程,但是也有些开发者选择直接调用线程对象的run()方法来执行线程代码。那么,start()和run()方法有什么区别呢?
区别
-
start()方法会启动一个新的线程并在新的线程中执行相应的run()方法,而直接调用run()方法只是调用了一个普通的方法而已,这个方法还是在主线程中执行的,没有启动新的线程。所以,直接调用run()方法并不会启动新线程。
-
start()方法会将新线程放入线程调度器中,当获得CPU时间片后便可以执行run()方法。而直接调用run()方法并不会启动新线程,所以run()方法也不会放入线程调度器中,而是由主线程直接调用执行。
示例说明
示例一
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("执行MyThread的run()方法...");
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
// 调用start()方法启动线程
myThread.start();
System.out.println("执行main()方法...");
}
}
输出结果:
执行main()方法...
执行MyThread的run()方法...
从结果中可以看到,main方法和MyThread的run方法是同时执行的,而没有等到MyThread的run方法执行完毕再执行main方法。
示例二
public class MyThread2 extends Thread {
@Override
public void run() {
System.out.println("执行MyThread2的run()方法...");
}
public static void main(String[] args) {
MyThread2 myThread = new MyThread2();
// 直接调用run()方法,不会启动新线程
myThread.run();
System.out.println("执行main()方法...");
}
}
输出结果:
执行MyThread2的run()方法...
执行main()方法...
从结果中可以看到,MyThread2的run方法直接被main线程执行,没有启动新线程。
小结
在Java多线程编程中,start()和run()方法虽然看起来只有一个字母的差别,但是它们的作用却大相径庭。接下来的示例代码中,我们可以使用start()方法来启动新线程,而直接调用run()方法则只是个普通的方法调用。开发者在编写多线程程序时,必须要明确这两者之间的区别。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java基本教程之Thread中start()和run()的区别 java多线程教程 - Python技术站