龙空技术网

面试题:Thread的start和run的区别

老顾聊技术 5625

前言:

现在朋友们对“线程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%消息投递成功吗?

标签: #线程start和run一样吗 #java 线程run和start区别