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

博客对Java中start()方法进行源码分析,通过查看http://hg.openjdk.java.net/jdk8u源码,定位到Thread.c和jvm.h文件。发现调用start()会调用JVM_StartThread创建新子线程,再通过thread_entry调用run()方法。总结得出start()创建并启动新线程,而run()只是普通方法调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值