问十:源码层面解析Thread中run()和start()的区别?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18657175/article/details/89735886

分析start()的源码:

调用start0()方法

    

是一个native方法

进入http://hg.openjdk.java.net/jdk8u源码页查看其native方法的源码

进入share目录,找到Thread.c

发现其调用了JVM_StartThread方法

通过查看其顶部引用,定位jvm.h

进入jvm.h进行查看

在JVM_StartThread中,新建了一个JavaThread,这个方法还调用了thread_entry方法

找到thread_entry方法

发现在这个方法中,执行了线程中的run()方法

总结之后就是:在调用start方法时,会调用JVM的JVM_StartThread,去创建一个新的子线程,再通过thread_entry方法去调用run()方法

回答:

调用start()方法会创建一个新的子线程并且启动

run()方法只是THread的一个普通方法的调用

猜你喜欢

转载自blog.csdn.net/qq_18657175/article/details/89735886