启动线程,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()会被立即执行
输出结果: