jdk包含了
- sun提供的java库, C文件, C++实现的hostpot
- 调用start0()方法, 会通过C文件,去调用hotspot,去通过操作系统函数,创建一个线程
- hotspot会将java的thread和他创建的线程绑定起来
- 也就是说java线程和操作系统的线程一一对应
java -> C -> C++ -> 系统函数 ->创建线程
java调用自己写的c库流程
生成链接库
- 编写java文件
- 编译成class文件
- class文件再编译成.h文件,记住他的方法
- 再编写c文件引入头文件,生成一个和h一样的方法,c文件方法是编写我们要实现的逻辑
- 再将c文件编译成动态链接库(so文件 或者 dll文件)
解析类,把这个threadNew.c编译成为一个动态链接库,这样在java代码里会被load到内存
- 需要配置path变量,可以找到so文件的路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{libLubanThreadNative.so}所在的
链接到c库
java -> load 动态链接库 -> 调用native方法 -> h文件的方法 ->动态链接(linux是 so文件, win是 dll文件) -> 链接到c文件-> 调用c文件方法
java start 如何调用到run方法
java层面: start -> start0() -> native start0()
C(jvm)层面: JVM_StartThread()
OS层面: pthread_create() 这里会回调jvm的run方法