大厂面试官问我Java线程和操作系统线程的联系

这个问题是安琪拉之前面试被问到的一个问题,正好顺着上一篇文章介绍完线程调用时的用户态和内核态的切换,后续把Java 并发的都一起讲了。 面试官:听前一个面试官说你Java并发这块掌握的不错,我们深入的交流一下; 我: 看了看面试官头部稀疏的结缔组织,

大厂面试官问我Java线程和操作系统线程的联系

这个问题是安琪拉之前面试被问到的一个问题,正好顺着上一篇文章介绍完线程调用时的用户态和内核态的切换,后续把Java 并发的都一起讲了。

面试官:听前一个面试官说你Java并发这块掌握的不错,我们深入的交流一下;

我: 看了看面试官头部稀疏的结缔组织,已然觉得这场面试不简单,不过好在事前把安琪拉的博客看了个遍,有所准备,我回答说:咳咳,掌握的还算可以。

面试官:Java线程用过的吧?

我:用过。

面试官:那你给我讲讲Java线程和操作系统的?

我:啊!!!

剧情不应该这样的啊,开场不应该先是 synchronized 或者 volatile,再然后是线程池和AQS,怎么上来就整这玩意。

我:好的,那我分三段讲,

用户态的线程

内核态的线程

Java 线程源码

1. 用户态的线程

第一阶段:

其实早期的时候,操作系统是没有线程的概念,线程是后面加进来的,操作系统刚开始只有进程,操作系统分配资源的最小单位是进程,进程与进程之间相关隔离,每个进程有自己的内存空间,文件描述符,CPU调度以进程作为最小调度单元;

第二阶段:

初期的多线程,线程是在用户空间下实现的。

什么意思?我们都知道内存分用户空间和系统空间,系统空间是给操作系统使用的,用户空间是应用程序使用的,应用程序如果需要访问系统空间,需要进行系统调用,从用户态切换到内核态,这里详细可以参考我上一篇文章: [讲讲用户空间和内核空间]

那怎么在用户空间实现的多线程呢?

实际上是操作系统按进程维度来调度,操作系统是不去管你用户线程的切换的,应用程序自己在用户空间实现线程的创建、维护和调度。模型如下图:

关于作者: dawei

【声明】:石家庄站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐