java多线程start方法与run方法分析

xiaoxiao2021-02-28  139

演示图

thread1

package thread; public class thread1 extends Thread{ public thread1() { } public void run() { System.out.println("线程里面的run执行"); } }

mian

package thread; public class mian extends Thread{ public static void main(String args[]) { thread1 t =new thread1(); t.start(); t.run(); System.out.println("ping"); }}

结果1

线程里面的run执行 ping 线程里面的run执行

结果二

线程里面的run执行 线程里面的run执行 ping

去掉start方法

package thread; public class mian extends Thread{ public static void main(String args[]) { thread1 t =new thread1(); t.run(); System.out.println("ping"); }}

结果唯一

线程里面的run执行 ping 去掉run方法 package thread; public class mian extends Thread{ public static void main(String args[]) { thread1 t =new thread1(); t.start(); System.out.println("ping"); }}

结果一

ping 线程里面的run执行

结果二(由于时间太短,无法出现另一种情况,我们给主函数加上sleep看看,主函数也是一个线程

package thread; public class mian extends Thread{ public static void main(String args[]) { thread1 t =new thread1(); t.start(); try { sleep(500); } catch (Exception e) { } System.out.println("ping"); }}

结果二

线程里面的run执行 ping

总结:start()是开启一个线程到就绪状态,等待获取cpu时间,然后获取之后运行内部run方法,然后销毁。

开启的线程与主线程是两个互不干扰的线程,所以输出是先后,根据获得cpu时间的顺序执行的。

 

直接调用run()方法,是作为一个类的一个普通方法使用的,所以调用先后根据使用顺序执行。

转载请注明原文地址: https://www.6miu.com/read-17842.html

最新回复(0)