java的平台线程(Platform threads)和虚拟线程(Virtual threads)

https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/lang/Thread.html

Java的java.lang.Thread支持创建平台线程(Platform threads)和虚拟线程(Virtual threads)。

平台线程(Platform threads)

  • 平台线程通常和内核线程是1:1的映射关系,被操作系统调度。
  • 平台线程通常需要大的堆栈和其它被操作系统维护的资源。
  • 平台线程可以执行所有类型的任务,但资源有限。
  • 平台线程默认有一个自动产生的名字。
  • 平台线程有守护(daemon )或者非守护(non-daemon)线程。
  • 当Java虚拟机启动时,通常有一个非守护线程(通常称为应用的主线程)。
  • 当所有非守护线程都停止的时候,开始关闭过程(shutdown sequence)。没有启动的非守护线程不会阻止关闭过程启动。
  • 平台线程有一个线程优先级。
  • 平台线程是线程组的成员。
  • 平台线程在创建时继承守护状态(daemon status)、线程优先级、线程组(如果没有提供的话)。
  • 创建平台线程时,捕获调用者上下文( caller context),来限制新创建的线程执行代码时的权限(当执行需要权限的动作时)。

虚拟线程(Virtual threads)

  • 虚拟线程典型的是用户模式的线程,被Java运行时调度,而不是被操作系统调度。
  • 虚拟线程通常需要更少的资源。一个Java虚拟机可以支持上百万的虚拟线程。
  • 虚拟线程适用的场景是大多数情况下被阻塞,通常等待I/O的完成。虚拟线程不适用长时间占用CPU的密集操作。
  • 虚拟线程一般用几个平台线程作为承载线程。
  • 在虚拟线程中执行的代码对底层的承载线程不感知。
  • 虚拟线程默认没有线程名字。
  • 虚拟线程是守护线程,因此不会阻止关闭过程的开始。
  • 虚拟线程有一个固定的线程优先级,且不能被改变。
  • 创建一个虚拟线程不捕获调用者上下文( caller context)。因此,虚拟线程没有权限执行需要权限的动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值