Java多线程基础:Java与线程

Java多线程基础:Java与线程

线程的实现

使用内核线程实现

内核线程(Kernel-Level Thread,KLT)就是直接 由操作系统内核支持的线程。内核通过操纵调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。

程序不会直接使用内核线程,而是使用内核线程的一种高级接口——轻量级线程(LWP), 每个轻量级线程都有一个内核线程对应。就像下面这样:

Java多线程基础:Java与线程

每个轻量级进程都需要一个内核线程的支持,因此轻量级进程要消耗一定的内核资源,因此 一个系统支持的轻量级进程的数量是有限的

使用用户线程实现

首先我们要理解什么是用户线程

从广义上讲,一个线程只要不是内核线程就是用户线程,所以从广义上讲轻量级进程程也属于用户线程,但轻量级进程的实现始终是建立在内核之上的,许多操作都要进行系统调用,效率会受到限制。

从狭义上讲,一个线程完全建立在用户空间的线程库上,系统内核不感知线程的存在,即使 用户线程。这种线程的建立、同步、销毁和调度完全在用户态中完成,不需要内核的帮助

Java多线程基础:Java与线程

但是线程的创建、切换和调度都是需要考虑的问题,而且由于操作系统只把处理器资源分配给进程,那诸如”阻塞如何处理”、”多处理器系统中如何将线程映射到其他处理器上”这类问题解决起来将会异常困难,甚至不可能完成。因而 使用用户线程实现的程序一般都比较复杂。Java也是浅尝辄止。

混合实现

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

Java多线程基础:Java与线程

Java线程的实现

JDK1.2之前使用了称为”绿色线程”的用户线程实现。JDK1.2中,使用了基于操作系统的远程线程模型来实现。

对于SunJDK来说, win和unix版都是一条Java线程映射到一条轻量级线程之中

参考资料

  • 《深入理解Java虚拟机》

Original: https://www.cnblogs.com/MrSaver/p/12987454.html
Author: 子烁爱学习
Title: Java多线程基础:Java与线程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/538042/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 记一次Redis实现布隆过滤器的优化实践

    业务方需要实现一个曝光去重的功能,决定采用布隆过滤器,又因为是多节点应用,为保证数据一致性,通过Redis实现。本文记录下开发时的思路,以及优化过程。 初次实现 Redis4.0以…

    Java 2023年6月5日
    067
  • JAVA三元运算符空指针引用的坑

    有以下代码: 很多人以为会输出:null,其实会报空指针异常 原因是编译后包装类型会拆箱: Long y = true ? x : 100L ; 反编译后变为:Long y = t…

    Java 2023年5月29日
    050
  • C# 多线程中CancellationToken(取消令牌)以及链式反应

    using System; using System.Net.Http; using System.Threading; using System.Threading.Channe…

    Java 2023年5月29日
    073
  • Linux firewall防火墙设置

    1、查看firewall服务状态 2、查看firewall的状态 3、开启、重启、关闭、firewalld.service服务 4、查看防火墙规则 5、查询、开放、关闭端口 Ori…

    Java 2023年6月7日
    073
  • springboot支持http2

    现在http/3都出来了,但是很多项目还是没有采用https,这个是说不过去的。 http3在2022/06/06 正式发布,具体见https://www.163.com/dy/a…

    Java 2023年6月9日
    081
  • t-io 学习笔记(一)

    基础介绍理解篇 序:本文也是在t-io官网学习的基础上写的理解学习笔记;1.什么是t-io? t-io是基于JVM的网络编程框架,和netty属同类,所以netty能做的t-io都…

    Java 2023年6月16日
    084
  • Java学习-动手动脑4

    异常处理 public class SystemExitAndFinally { public static void main(String[] args) { try { Sy…

    Java 2023年6月9日
    063
  • nginx负载均衡高可用

    1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。…

    Java 2023年5月30日
    088
  • Java 反汇编指南javap

    前言 在正式解读《Effective Java》之前,我们需要先了解 Java 反汇编,因为反汇编是我们学习和研究问题的重要手段之一。 结合反汇编才能更好地理解《Effective…

    Java 2023年5月29日
    091
  • IDEA使用Gittee提交代码

    今天给大家分享一下如何从idea提交代码到gitee上面。1.先在gitee上创建仓库2.填写相应的信息3.下载git直接next一站式安装4.鼠标右键点击 Git Bash He…

    Java 2023年6月9日
    088
  • jar包解压后怎么还原成jar包

    在需要打包的文件夹中,按住shift+鼠标邮件,点击在此处运行命令窗口(win10是PowerShell),输入jar cvf xxx.jar * xxx.jar是你要打包成的ja…

    Java 2023年6月16日
    096
  • 谷粒商城实战基础篇

    参考博客:https://blog.csdn.net/weixin_44190665/article/details/121043585 1.项目介绍 1.1 谷粒商场微服务架构图…

    Java 2023年6月8日
    078
  • 一个人成为废物得九大特质

    成为废物的九大特质 决定事情犹豫不决,优柔寡断 很强得拖延症 做什么事都三分钟热度 害怕被拒绝 自我设限(百度一下,你就知道) 经常逃避现实,不敢面对现实 总是能找到各种借口 总是…

    Java 2023年6月7日
    077
  • 面试官:线程池如何按照core、max、queue的执行循序去执行?(内附详细解析)

    前言 这是一个真实的面试题。 前几天一个朋友在群里分享了他刚刚面试候选者时问的问题: “线程池如何按照core、max、queue的执行循序去执行?”。 我…

    Java 2023年5月30日
    081
  • 深度剖析Istio共享代理新模式Ambient Mesh

    摘要:今年9月份,Istio社区宣布Ambient Mesh开源,由此引发国内外众多开发者的热烈讨论。 今年9月份,Istio社区宣布Ambient Mesh开源,由此引发国内外众…

    Java 2023年6月15日
    070
  • java 线程池 Executors,ExecutorService

    1,线程池对象 1,Executors 工厂类 方法 newFixedThreadPool(int num),创建固定个数线程池,num 代表线程个数 方法 newCachedTh…

    Java 2023年5月29日
    074
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球