JAVA线程创建底层流程

下面让我们来大概的分析下一个Java线程启动后,底层的调用细节。

环境:JDK:1.8

           glibc:2-25

           linux-kernel:2.6.0




1240
1.0-大致的执行流程

一JAVA 层面:

当我们创建一个线程并执行start()方法后这个线程才会被创建和执行。java.lang.Thread.start()方法会调用本地方法start0();

1240

二 JVM 层面:

接下来start0()方法会调用JVM_StartThread()方法:


1240

这是JVM_StartThread的具体实现,可以看到,它会创建一个JavaThread实例。

1240

我们来看看JavaThread的构造方法里边发生了什么:


1240

os::create_thread的具体实现。在这个方法中会创建一个平台相关的OSThread 实例。

1240

在os::create_thread()方法中会利用glibc库中的pthread.h中的pthread_create方法创建一个轻量级的Linux进程,这个方法执行后,线程创建控制流从JVM转到OS.

1240

三 OS层:

pthread.h 中定义pthread_create()方法。

1240

pthread_create()方法的具体实现。

1240

pthread_create 方法进入clone方法的桥梁create_thread()方法。

1240

create_thread方法的具体实现:


1240

系统调用:

1240

系统调用的处理程序:sys_clone


1240

do_fork()函数的具体实现:


1240

参考资料:①https://yq.aliyun.com/articles/67090?                                                       spm=5176.8091938.0.0.G8W8Xw

                  ②http://blog.csdn.net/u011955950/article/details/45601985

                  ③http://hllvm.group.iteye.com/group/topic/43599

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值