Java的线程实现

Java线程是如何实现的?

当我们追踪Java线程的实现时,可以发现Thread类的start方法最后会运行一个start0方法,而这个方法是native的,也就是交由JDK来实现的(JDK会屏蔽调底层操作系统的差异,提供给Java开发者一套通用的线程接口)

而要搞清楚这个问题的答案,首页我们得对线程的实现有一定的了解。
线程的主要实现方式有3种(线程模型),分别是使用内核线程实现、使用用户线程实现和使用用户线程加轻量级进程混合实现。

使用内核线程实现

  • 优点:
    一个线程被阻塞也不会影响整个进程工作。

  • 缺点:

  1. 各种线程操作(如创建、析构及同步等)都需要进行系统调用,性能消耗高在用户态和内核态来回切换。
  2. 线程和内核线程一比一,内核线程也是要消耗资源的(如内核线程栈空间),所以支持的数量是有限的。

使用用户线程实现

  • 优点:
    用户线程的创建、同步、销毁及调度完全是在用户态中完成,不需要切换到内核态,因此操作是快速且低消耗的。

  • 缺点:
    因为没有内核的支持,线程的所有操作都需要用户程序自己实现,实现异常复杂。操作系统只把处理器资源分配到进程,“阻塞如何处理”,“多处理器系统如何将线程映射到其他处理器上”这类问题,甚至不可能解决。

使用用户线程加轻量级经常混合实现

  • 优点:
    混合前2种的优点;
    用户线程操作快速且低消耗,支持更多的并发;一个线程阻塞也不会导致整个进程阻塞。
  • 缺点:
    实现相对复杂,且需要操作系统对应支持。

Java线程的实现

Java线程的调度

参考文档

  • 书籍:周志明 *《深入理解Java虚拟机》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值