资讯专栏INFORMATION COLUMN

Java线程的实现

mj / 3391人阅读

摘要:线程使用的是堆外内存空间。也就是说,进程内部会尝试利用的内核线程去参与实际的调度,而自己使用调用作为中间桥梁与自己的程序进行交互。基于用户线程,的实现是否可以没有中间这一层映射,自己的线程直接由来调度,或许理论上效率更高。

一个线程的启动是需要通过Thread.start()方法来完成的(也只有start才完成一个线程的真正创建,new Thread不算),这个方法会调用本地方法JNI来实现一个真正意义上的线程,或者说只有start成功调用后由OS分配线程资源,才能叫做线程,而在JVM中分配的Thread对象只是与只对应的外壳。

轻量级进程

线程为轻量级进程,多个线程共享一个进程资源,对于OS的许多资源的分配和管理(例如内存)通常都是进程级别的,线程只是OS调度的最小单位,线程相对进程更加轻量一些,它的上下文信息会更少,它的创建与销毁会更加简单,线程因为某种原因挂起后不会导致整个进程被挂起,一个进程中又可以分配许多的线程。但是某个线程占用过多资源会导致整个进程宕机。线程使用的是堆外内存空间。

启动线程

start方法怎么启动线程的:

(1)基于Kernel Thread(KLT)的映射来实现(Java采用此方案)

KLT是内核线程,内核线程由OS直接完成调度切换,它相对应用程序的线程来讲只是一个接口,外部程序会使用一种轻量级进程(Light Weight Process,LWP)来与KLT进行一对一的接口调用。也就是说,进程内部会尝试利用OS的内核线程去参与实际的调度,而自己使用API调用作为中间桥梁与自己的程序进行交互。

(2)基于用户线程(User Thread,UT)的实现

是否可以没有中间这一层映射,自己的线程直接由CPU来调度,或许理论上效率更高。不过这样实现时,用户进程需要关注的抽象层次会更低一些,跳过OS更加接近CPU,即自己要去做许多OS要做的事情,自然的OS的调度算法、创建、销毁、上下文切换、挂起等等都要自己要搞定(CPU只做计算),这样做显然很麻烦,有人尝试了,后来放弃了。

(3)混合实现方式

设计理念是既希望保留Kernel线程原有的架构,又想使用用户线程,轻量级进程依然与Kernel线程一一对应,唯一的变化就是轻量级进程不再与进程直接挂钩,而是与用户线程挂钩,用户线程不一定必须与轻量级进程一一对应,而是多对多,就像在使用一个轻量级进程列表一样,增加了一层来解除轻量级进程与原进程之间的耦合。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65737.html

相关文章

  • java内存模型和线程

    摘要:内存之间的交互关于主内存和工作内存之间的具体交互协议,内存模型定义了中操作来完成,虚拟机实现的时候必须保证每个操作都是原子的,不可分割的对于和有例外锁定作用于主内存变量,代表一个变量是一条线程独占。 并发不一定依赖多线程,但是在java里面谈论并发,大多与线程脱不开关系。 线程是大多是面试都会问到的问题。我们都知道,线程是比进程更轻量级的调度单位,线程之间可以共享内存。之前面试的时候,...

    shiyang6017 评论0 收藏0
  • JAVA线程和并发基础

    摘要:线程可以被称为轻量级进程。一个守护线程是在后台执行并且不会阻止终止的线程。其他的线程状态还有,和。上下文切换是多任务操作系统和多线程环境的基本特征。在的线程中并没有可供任何对象使用的锁和同步器。 原文:Java Multi-Threading and Concurrency Interview Questions with Answers 翻译:并发编程网 - 郑旭东 校对:方腾飞 多...

    vboy1010 评论0 收藏0
  • JAVA线程和并发基础面试问答

    摘要:多线程和并发问题是技术面试中面试官比较喜欢问的问题之一。线程可以被称为轻量级进程。一个守护线程是在后台执行并且不会阻止终止的线程。其他的线程状态还有,和。上下文切换是多任务操作系统和多线程环境的基本特征。 多线程和并发问题是 Java 技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。(...

    dreamans 评论0 收藏0
  • Java 线程实现方式

    摘要:线程的可能实现方式基本上主流的操作系统都支持线程,也提供了线程的实现。使用用户线程和内核线程混合实现在这种混合实现下,既存在用户线程,也存在内核线程。 进程与线程 在传统的操作系统中,最核心的概念是进程,进程是对正在运行的程序的一个抽象。进程的存在让并行成为了可能,在一个操作系统中,允许运行着多个进程,这些进程看起来是同时在运行的。如果我们的计算机同时运行着 web 浏览器、电子邮件客...

    曹金海 评论0 收藏0
  • 学习Java线程一些总结

    摘要:多线程环境下的一些问题安全性问题在没有正确同步的情况下,多线程环境下程序可能得出错误的结果。一些相关概念竞争条件多线程的环境下,程序执行的结果取决于线程交替执行的方式。而线程的交替操作顺序是不可预测的,如此程序执行的结果也是不可预测的。 入口 Java多线程的应用复杂性之如jvm有限的几个内存方面的操作和规范,就像无数纷繁复杂的应用逻辑建立在有限的指令集上。 如何写出线程安全的程序,有...

    coolpail 评论0 收藏0
  • 想进大厂?50个多线程面试题,你会多少?(一)

    摘要:下面是线程相关的热门面试题,你可以用它来好好准备面试。线程安全问题都是由全局变量及静态变量引起的。持有自旋锁的线程在之前应该释放自旋锁以便其它线程可以获得自旋锁。 最近看到网上流传着,各种面试经验及面试题,往往都是一大堆技术题目贴上去,而没有答案。 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员...

    wow_worktile 评论0 收藏0

发表评论

0条评论

mj

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<