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

分析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的一个普通方法的调用

 

 

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
04-08 00:50
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务