前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试题:Thread的start和run的区别

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

作者头像
业余草
发布2019-10-28 17:05:14
8870
发布2019-10-28 17:05:14
举报
文章被收录于专栏:业余草业余草

原文链接:https://www.xttblog.com

前言

这道题是并发编程关于线程Thread基础的面试题,小伙伴们是不是感觉简单?还是自己一下子蒙了呢?老顾今天来分享一下

先上代码

640?wx_fmt=jpeg
640?wx_fmt=jpeg
代码语言:javascript
复制
	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方法源码

640?wx_fmt=jpeg
640?wx_fmt=jpeg

start方法中调用了本地方法start0,native即是本地方法(也是底层方法)。怎么看start0方法,可以去访问openjdk源码(访问比较慢)。

640?wx_fmt=jpeg
640?wx_fmt=jpeg

start0映射的方法就是JVM_StartThread,我们再看一下jvm.cpp文件中JVM_StartThread方法,里面有段代码

640?wx_fmt=jpeg
640?wx_fmt=jpeg

在看下thread_entry方法

640?wx_fmt=jpeg
640?wx_fmt=jpeg

就是在thread_entry方法中调用run方法

总结

start方法中的基本流程

640?wx_fmt=jpeg
640?wx_fmt=jpeg

小伙伴们看到这里,是不是感觉这个面试题很简单呢?如果我们能够回答面试官达到源码级别,再弄个流程图,应该会加分吧。不要小看很简单的问题,也许里面有大学问。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 先上代码
  • 源码分析
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档