java 线程引用头文件_线程一

本文探讨了Java线程模型,解释了为何Java的`start()`方法会调用`run()`方法。Java线程是基于操作系统线程实现的,通过C库中的JavaThread类调用操作系统的pthread_create()函数创建线程。Java中的`synchronized`关键字在早期依赖于Mutex,而现在的实现进行了优化。线程的`.c`文件通过Java虚拟机调用操作系统函数,以实现对线程的管理和控制。
摘要由CSDN通过智能技术生成

java线程模型

问题:Java线程启动.start()方法为什么会调用了run()方法?

OS中的线程(Linux)

1)调用pthread_create()函数,创建并执行一个线程, pthread_create函数有四个参数(C/C++不必深究),详情见笔记,

第三个参数为方法体,相当于Java线程回调函数(run方法)

2)Linux解决线程竞争关系(互斥锁),Mutex---可以去详解一下

Java中的线程

java中线程的原理就是操作系统线程原理,java中锁的原理就是操作系统中锁的原理

synchronized---JDK 1.5之前解决线程之间的竞争通过调用操作系统的Mutex去解决,1.6以后做了优化

java中start方法调用run方法其实是一种为模板方法模式,因为start0方法为系统调用的方法,无法在start中写入逻辑,只能通过

实现一个run方法让系统去调用run方法去实现

JDK中提供了Java类库、C库、虚拟机项目。C库(一些C文件)的作用有两个,一个是实现调用操作系统函数,一个作用是调用JVM的代码

Java新创建的线程.start()方法执行会调用start0()的本地方法,start0()调用线程对应的.c文件,.c文件调用hostpot(java虚拟机),

hostpot通过创一个JavaThread类对象(C++)去调用操作系统pthread_create()函数去创建一个线程,最终通过JavaThread类调用run()方法,

Java中的线程和操作系统中的线程是一一对应的,也就是说有一个java线程就会有一个操作系统线程。

线程的.c文件为什么要通过java虚拟机去调用操作系统函数去启动一个线程?

因为Java线程类中有很多API,如果线程对应.c文件中去实现Java线程类中的API,这个.c文件内容会非常多并且使用会非常多,Java虚拟机

提供了一个JavaThread类(C++),java中Thread类中的API会跟JavaThread类中的API一一对应,JavaThread类可以直接调用操作系统中的函数。

通过Java虚拟机提供的JavaThread类去调用操作系统函数,Java虚拟机可以实现一些对线程的控制

通过java代码调用本地方法去启动一个线程以Linux为例

1.首先创建一个.c文件,引入使用pthread_create()的头文件#include,int main中调用pthread_create()函数,代码见笔记

2.gcc编译 完成后 可以用./启动编译后的文件执行,启动线程

3.

验证Java线程中的run方法是操作系统中pthread_create()函数中的第三个参数

1.通过java启动一个线程,函数主体是C程序提供的函数

1) 补上过程

2) xxx

xxx

2.通过java启动线程,回调run方法

1)

2) xx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值