JVM-java线程实现

线程的实现

线程是cpu最小的调度单位。

线程实现的方式主要有:

1,使用内核线程实现;

2,使用用户线程实现;

3,使用用户线程和轻量级进程实现;

使用内核线程实现

内核线程就是直接由操作系统内核支持的线程,这种进程由内核来完成进程切换,内核通过调度器对线程进行调度,并负责将线程的任务映射的处理器上。每个内核线程可以看作为内核的一个分身。

程序一般不会直接使用内核线程,而是去使用内核线程的一个高级接口--轻量级进程,轻量级进程就是我们通常说的线程,每个轻量级进程都有一个内核线程支持,因此只有先支持内核线程,才有轻量级进程,他们的关系是1:1。

 

注:LWP:轻量级进程 K:内核线程

优缺点:

优点:由系统调度,无需处理线程切换、创建、调度问题

缺点:需要消耗内核资源,因此一个系统支持的轻量级进程是有限的。

使用用户线程实现

用户线程是指完全建立在用户空间的线程库上,系统内核不能感知线程存在的是实现。 用线程的创建、同步、销毁和调度完全在用户态完成,不需要内核帮助。

 

优点:使用得当的话,由于线程不需要切换到内核态,因此是非常快速且低消耗的。

缺点:用户线程的优点在于不用内核支持,缺点也在于没有内核的支持,所有线程操作都需要自己处理,线程的创建、切换和调度都是需要考虑的问题。

 

使用用户线程和轻量级进程实现

这种实现方式,用户线程和轻量级进程同时存在。用户线程依然建立在用户空间中,因此线程的创建、切换、析构等操作依旧廉价,并且可以支持大规模的用户线程并发。而且操作系统提供支持的轻量级进程则作为用户线程和内核之间的桥梁,这样可以使用内核提供的线程调度功能以及处理器映射,且用户线程的系统调用通过轻量级进程来完成,降低进程被阻塞的风险。

java线程的实现

jdk1.2之前,基于绿色线程的用户线程实现。

对于sun jdk,它的windows和Linux都是使用一对一线程模型实现的。

而在Solaris平台,可以同时支持一对一以及多对多的线程模型。

所以,java线程都是映射到原生线程实现的。

java线程调度

主要调度方式分为两种: 1,协同式线程调度 2,抢占式线程调度

协同式线程调度:

线程的执行时间由线程本身控制,线程把自己任务执行完之后,主动通知系统切换到下一个线程上。

优缺点:

优点:实现简单,无需考虑同步问题

缺点:一直不告知系统进行切换,那么程序就会一直阻塞。

抢占式线程调度:

每个线程都由系统来分配执行时间,线程的切换不由线程本身决定(可以通过Thread.yield()让出执行时间,但是想要获取执行时间,是没办法的)。

线程优先级

由于操作系统的差异性,每个系统的的优先级都不能与java线程的优先级一一对应,所以java线程中设置线程的优先级并不是太靠谱。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值