线程中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()会被立即执行

输出结果:

 

posted @ 2018-05-23 22:28  忆雨1992  阅读(18976)  评论(2编辑  收藏  举报