问十:源码层面解析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的一个普通方法的调用

 

 

全部评论

相关推荐

程序员饺子:正常 我沟通了200多个 15个要简历 面试2个 全投的成都的小厂。很多看我是27直接不会了😅
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务