线程中start()和run()的区别


每个线程都有要执行的任务。线程的任务处理逻辑可以在Tread类的run实例方法中直接实现或通过该方法进行调用,因此

run()相当于线程的任务处理逻辑的入口方法,它由Java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用。

而start()的作用是启动相应的线程。启动一个线程实际是请求Java虚拟机运行相应的线程,而这个线程何时能够运行是由线程调度器决定的。start()调用结束并不表示相应线程已经开始运行,这个线程可能稍后运行,也可能永远也不会运行。

下面看一个例子:

 

 1 /**
 2  * run()相当于线程的任务处理逻辑的入口方法
 3  * start()的作用是启动相应的线程
 4  * @author yiRain
 5  *
 6  */
 7 public class startAndRun {
 8     public static void  main(String[] args) {
 9         Thread t = new Thread(){
10             public void run(){
11                 world();
12             }
13         };
14         
15         t.start();
16         //t.run();
17         System.out.print(" Hello ");
18     }
19     
20     static void world(){
21         System.out.print(" world ");
22     }
23 
24 }

 

 

输出结果:

 

 相应的调用t.run(),只是调用一个实例的方法而已,并未启动线程,因此run()会被立即执行

输出结果:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM