当前位置:首页 > Java技术 > Java多线程和操作系统多线程关系

Java多线程和操作系统多线程关系

2022年09月17日 15:24:53Java技术6

这篇文章要讨论的是Java编程中的多线程和操作系统中的多线程的区别问题。

线程状态。首先两者的线程状态是一样的。(创建、就绪、执行、阻塞、终止),其实这五个状态也是进程的状态。

那么Java中的多线程 和 OS中的多线程的区别在哪里?


我们先来看下OS中的线程实现

OS中线程的实现有三种,一种是用户级线程ULT(UserLevelThreads),一种是内核支持线程KST(KernelSupportedThreads),还有一种是前两种的组合方式

所以我们大可以将OS实现线程的方式分为两类,一类是用户级,一类是内核级。这两类的不同在于用户级线程是在用户空间实现的,而内核级线程是在OS内核空间实现的。设置用户级线程的系统,调度是以进程为单位的。而设置了内核级进程的而是以线程为单位进行调度的。

OS内核常驻在内存中,所以将内存空间分为内核空间和用户空间。 线程在内核中实现有以下几个好处:

  1. 内核可以在多处理器系统中调度同一进程中的多个线程并行执行。
  2. 如果某一个进程中的线程阻塞了,可以跨进程调度其他线程进行执行
  3. 线程的切换速度快,开销小。并且内核本身支持多线程技术可以提高系统的执行速度和效率。
但是也有个缺点,当用户将线程交付下来时要将线程由用户态切换为核心态再进行调度等操作,因此也会造成模式切换的开销较大。

线程在用户空间实现的主要优点:

  1. 首先线程的切换不需要转换到内核空间,所以节省了模式切换的开销
  2. 用户级线程的实现和OS平台无关,对于线程管理的代码是属于用户程序的一部分。用户级线程甚至可以在不支持线程机制的OS上实现。
用户级线程的缺点:
  1. 一个进程被分配一个CPU,同一时刻只能有一个线程运行。
  2. 若进程中的正在运行的线程阻塞,则当前进程的其他线程全被阻塞。

组合方式: 组合方式综合前两种的优点,分为三种模型:多对一、一对一、多对多 简单理解下就是 不同数量的用户级线程 搭配

不同数量的内核级线程。此处不再做过多的介绍。

以上便是操作系统中线程的实现。


Java中的多线程实现

看到用户级的线程实现,是不是都要以为用户级的线程就是我们现在Java的多线程支持,然而并不是


Java多线程是在JVM中实现的,而JVM相对于OS是一个进程。我们用Java编写的多线程程序对于OS来说是不可见的。OS只关心JVM交付给它的任务。至于我们写的多线程具体是怎么实现的,就要看JVM怎么将我们的程序交给OS运行了。

补充一下:
https://www.zhihu.com/question/23096638
这里面解释的很详细


作者:tadadfa
来源链接:https://blog.csdn.net/yangmx_5/article/details/68065299

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/42668.html

分享给朋友:

“Java多线程和操作系统多线程关系” 的相关文章

深入理解 Java 并发锁

深入理解 Java 并发锁

📦 本文以及示例源码已归档在 javacore 一、并发锁简介 确保线程安全最常见的做法是利用锁机制(Lock、sychronized)来对共享数据做互斥同步,这样在同一个时刻,只有一个线程可以执行某个方法或者某个代码块,那么操作必然是原子性的,线程安全的...

Java日志框架那些事儿

Java日志框架那些事儿

在项目开发过程中,我们可以通过 debug 查找问题。而在线上环境我们查找问题只能通过打印日志的方式查找问题。因此对于一个项目而言,日志记录是一个非常重要的问题。因此,如何选择一个合适的日志记录框架也非常重要。在Java开发中,常用的日志记录框架有JDKLog、Log4J、LogBack、SLF4J...

java中将英尺换算为身高

java中将英尺换算为身高

直接上代码 如图所示便是身高的换算,你学到了吗?、 int foot; double inch; Scanner in=new Scanner(System.in); foot=in.nextInt(); inch=in.nextDouble...

我对java String的理解 及 源码浅析

我对java String的理解 及 源码浅析

摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 每天起床告诉自己,自己的目标是 ”技术 + 英语 还有生活“! -泥沙砖瓦浆木匠 一...

全网最细笔记java与kotlin的一些异同

本文主要介绍java与kotlin的一些异同 后面可能还会继续比较kotlin和dart 期待吗? 打印日志 Java System.out.print("Amit Shekhar"); S...

java总结文章

java总结文章

java总结文章 原创地址: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),需要转载的,保留下! Thanks Talk is cheap. Show me the...

java提高篇(十六)

java提高篇(十六)

     Java的基本理念是“结构不佳的代码不能运行”!!!!!       大成若缺,其用不弊。       大...

java空指针异常:java.lang.NullPointException

一.什么是java空指针异常     我们都知道java是没有指针的,这里说的"java指针"指的就是java的引用,我们不在这里讨论叫指针究竟合不合适,而只是针对这个异常本身进行分析。空指针就是空引用,java空指针异常就是引用本身为空,却调用了方...

Java实现ModbusTCP通信

Java实现ModbusTCP通信

使用ModbusTCP实现和硬件设备通信 有问题可以私信和评论,看到会回复。 一个项目,需要用Java实现使用ModbusTCP和硬件设备通信 视频地址:https://www.bilibili.com/video/BV1cz4y1R7cg...

java高级

java高级

  Java动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架。下...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。