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)

大家都在看

  • idea警告 breakpoints dramatically slow down

    idea启动项目提示的黄色警告 , 其实就是有地方断点之后 , 影响项目运行速 打开断点管理 , 查看具体是哪个影响了 , 断点不需要了及时取消 Original: https:/…

    Java 2023年6月15日
    066
  • 如何实现跨域?

    https://blog.csdn.net/meism5/article/details/90414283 Original: https://www.cnblogs.com/cr…

    Java 2023年6月13日
    080
  • 【万字长文】Dubbo 入门总结 ,一款高性能的 Java RPC 框架

    这篇文章是我学习整理 Dubbo 的一篇文章,首先大部分内容参考了官网 + 某硅谷的视频,内容讲解进行了重新编排,40多张图片,也都是我修改重制的,虽然一万多字,但是其实也可以看出…

    Java 2023年5月29日
    086
  • 理解IOC

    学习Spring,IOC是个绕不过去的话题。作为Spring的基础,IOC有太多博客和教程了。这里做个简单的梳理,以找工作为例,谈谈我对IOC的理解。 在经典的MVC架构这,一般会…

    Java 2023年6月5日
    0109
  • Spring入门案例-基于XML管理bean

    1. 入门案例–hello spring 创建Maven Module 在pom.xml中引入依赖 org.springframework spring-context…

    Java 2023年6月14日
    0108
  • 【Unity Shader学习笔记】Unity基础纹理-渐变纹理

    纹理可以用来存储任何表面属性。 可以通过使用渐变纹理来实现插画风格的渲染效果。 这项技术是由Valve公司提出的。Valve使用它来渲染游戏中具有插画风格的角色。 我们使用半兰伯特…

    Java 2023年6月8日
    0112
  • 群晖安装docker 安装neuxs3

    群晖docker 文件夹下创建 docker 下载neuxs3 启动容器 映射端口3003:8081 群晖反向代理。不用https的这一步可以不用,之间路由转发端口3003就行 路…

    Java 2023年6月6日
    093
  • C# 线程手册 第七章 网络和线程 创建服务端

    好的,我们现在来创建服务端程序。由于目的系统的多客户端特性,我们在创建StockServer 程序时要采用一个稍微不同的方案。我们想要跟踪客户端行为并知道它们什么时候连接/断开。由…

    Java 2023年5月29日
    081
  • SVN问题之——org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir

    https://blog.csdn.net/a_running_wolf/article/details/50833462 Original: https://www.cnblog…

    Java 2023年5月29日
    094
  • Spring进一步学习

    1、beans.xml编写 2、别名 (1)alias (2)name 3、依赖注入(DI) (1)数组注入 (2)List注入 (3)Map注入 (4)set注入 (5)Null…

    Java 2023年6月5日
    077
  • Mybatis 源码2——SqlSession,执行器和一级缓存

    一丶 SqlSessionFactoryBuilder,SqlSessionFactory,sqlSession mybatis 获取sqlSession是通过SqlSession…

    Java 2023年6月14日
    0107
  • java对象的序列化以及反序列化详解

    一、概念 序列化:把创建出来的对象(new出来的对象),以及对象中的成员变量的数据转化为字节数据,写到流中,然后存储到硬盘的文件中。 反序列化:可以把序列化后的对象(硬盘上的文件中…

    Java 2023年5月29日
    0114
  • Go mod 使用指定包版本

    使用命令 ,指定版本号即可 go get github.com/xxx/xxx@1.0.0 如果使用的模块项目没有发布新的版本,那么可以使用 git commit SHA go g…

    Java 2023年6月9日
    072
  • 【JAVA】Macbook eclipse快速抽取函数快捷键(extract method)

    抽取函数快捷键 右键 — refactor — extract method windows: alt+shift+M Mac: option+comman…

    Java 2023年5月29日
    0115
  • mysql 内部函数

    1. group_concat 返回一个字符串结果,该结果由分组中的值连接组合而成。 函数语法: group_concat( [DISTINCT] 要连接的字段 [Order BY…

    Java 2023年6月13日
    083
  • 数据库的多表查询

    我们知道,增删查改这几种操作在开发过程中不可或缺,下面重点介绍的是查询操作 在数据库中,80%的操作是通过查询完成的.在实际开发中能中,不可能只会用到一张表,多表查询在查询中起很大…

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