栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

start线程底层源码分析(深入到jdk源码)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

start线程底层源码分析(深入到jdk源码)

博客主页:https://blog.csdn.net/GBS20200720
博主昵称:怎么又有bug单
主要领域:Java、Linux、K8S
期待大家的关注点赞收藏⭐留言

今天给大家看一下,从最简单的一个start启动一个线程。能获得什么知识?结合jvm和操作系统底层的运作、结合C++源代码的分析来给大家介绍一个线程是如何起来的。

到Thread线程内部第696行,这儿我们可以看得出所有的start其实调用到的是Thread.java这个类。然后它调用了这么一个同步的start方法,也就说这个线程必须要全部走完,对吧?再往下看所有的方法实质而言调用的是start0这个方法。

在这儿有一个布尔值first start0,这个方法调用完成以后,马上变成代表启动成功,那么所谓的start0又是什么呢?学过jvm的知识的同学,有这个知识背景的都会了解,native代表的是本地接口的调用,调的是第三方c语言所编写的底层函数或者是操作系统。我们大家都清楚,从操作系统这个角度,在任务管理器里面,你就是没有装jdk,它也有操作系统级别的进程和线程,有进程必然会有线程。得到第一个结论,对于多线程、他跟语言没有太多关系,是操作系统层面所给的。

所以说启动以后,接下来就要看看。换以前可能就到这儿,到native也就到头了。反正到这儿明白了,start是调一个start0,要用的是底层的native函数。那么这个底层native又是什么呢?接下来我们进行一下源码的分析和讲解。

JAVA线程要理解,就必须谈及到一个概念叫open JDK ,JAVA源代码中更底层的源代码。

对于JAVA历史知道的同学都清楚,Java语言的前身其实就是C++。由于C++太过于强大,于是把一些复杂的功能做了一些简化,相当于这门语言就把它减减了一些复杂的概念,就变成了JAVA这门语言。所以说JAVA的上手要比C++舒服。

所以说openJDK就是C++对JAVA语言的描述和说明。

所以图中可以看到,java代码中native方法start0,其实就对应openJDK源码中的Thread::start。

464行可以看到

os::start_thread(thread);

os就是operate System,也就是操作系统。这也应征了我们之前的理论,多线程并非与语言强关联,而是编程语言对操作系统的调用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942364.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号