为什么说Java天生支持多线程

Java的线程是由jvm来管理的,它如何映射到操作系统的线程是由jvm实现来决定的。

lwp轻量级进程是对内核线程的一层封装,提供给用户线程调用,用户线程即为编程语言实现的一套线程机制。

协程是在编程语言层面实现的,使用yield关键字,类似于汇编语言的跳转,协程也有自己的寄存器等,只不过这些都是有自己进行控制,协程从属于线程,一个线程可以有很多歌协程,这样就避免了线程上下文切换的开销,因协程是在一个线程里,所以也不存在锁,效率比较高,能够支持很多并发,但不能利用多核cpu资源,Java可以采用多线程+协程方式实现更多的并发操作。

jvm正是被设计成采用lwp(轻量级进程)来实现与操作系统的内核线程形成一比一的映射关系,来实现Java内部的多线程,并提供了相应的语法来进行编码,其实调用Java的多线程就是调用内核线程来执行,所以说Java 天生是支持多线程的语言。

但内核线程都有一个内核线程栈,用来存储执行一系列方法的临时空间,并且线程栈之间是不共享的,每个栈会使用一定的内存空间,Java栈默认1024k,所以一个jvm开1024线程,线程栈至少就会耗掉1G的内存空间,由于这个限制,线程也不能开的过多,并且操作系统对每个进程能开的内核线程数量也是有限制的。Java线程与内核线程的映射图如下:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值