前言:
现在朋友们对“线程start和run一样吗”大概比较关切,大家都需要了解一些“线程start和run一样吗”的相关资讯。那么小编在网上搜集了一些有关“线程start和run一样吗””的相关内容,希望看官们能喜欢,小伙伴们快快来了解一下吧!欢迎关注头条号:老顾聊技术
精品原创技术分享,知识的组装工
目录前言先上代码源码分析总结前言
这道题是并发编程关于线程Thread基础的面试题,小伙伴们是不是感觉简单?还是自己一下子蒙了呢?老顾今天来分享一下
先上代码
t.run(); //调用run方法
//调用执行
current main thread is main
task run.....
task thread is : main
换成调用方法t.start(),执行
current main thread is main
task run.....
task thread is : Thread-0
小伙伴们是否已经知道他们的区别了
1、run方法就是个普通的方法,被main线程调用,所以在执行task()方法时,是main线程调用的。
2、start方法被main线程调用,但执行task()方法并不是main线程。
源码分析
知道了run和start的区别,我们来看看start方法源码
start方法中调用了本地方法start0,native即是本地方法(也是底层方法)。怎么看start0方法,可以去访问openjdk源码(访问比较慢)。
start0映射的方法就是JVM_StartThread,我们再看一下jvm.cpp文件中JVM_StartThread方法,里面有段代码
在看下thread_entry方法
就是在thread_entry方法中调用run方法
总结
start方法中的基本流程
小伙伴们看到这里,是不是感觉这个面试题很简单呢?如果我们能够回答面试官达到源码级别,再弄个流程图,应该会加分吧。不要小看很简单的问题,也许里面有大学问。
谢谢!!!
-End-
如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!
10几年的经验实战分享
相关微服务,分布式,高并发,高可用,企业实战,干货等原创文章正在路上
欢迎关注头条号:老顾聊技术
精品原创技术分享,知识的组装工
推荐阅读
1、如何解决Redis热点问题?以及如何发现热点?
2、如何设计API接口,实现统一格式返回?
3、你真的知道在生产环境下如何部署tomcat吗?
4、分享一线互联网大厂分布式唯一ID设计 之 snowflake方案
5、分享大厂分布式唯一ID设计方案,快来围观
6、你想了解一线大厂的分布式唯一ID生成方案吗?
7、你知道如何处理大数据量吗?(数据拆分篇)
8、如何永不迁移数据和避免热点? 根据服务器指标分配数据量(揭秘篇)
9、你知道怎么分库分表吗?如何做到永不迁移数据和避免热点吗?
10、你了解大型网站的页面静态化吗?
11、你知道如何更新缓存吗?如何保证缓存和数据库双写一致性?
12、你知道怎么解决DB读写分离,导致数据不一致问题吗?
13、DB读写分离情况下,如何解决缓存和数据库不一致性问题?
14、你真的知道怎么使用缓存吗?
15、如何利用锁,防止缓存击穿?重构思想的重要性
16、海量订单产生的业务高峰期,如何避免消息的重复消费?
17、你知道如何保障生产端100%消息投递成功吗?