java体系中线程的实现

1.使用内核线程实现

内核线程就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上,每个内核线程可以视作内核的一个分身,这样操作系统就有能力处理多件事情,支持多线程的内核就叫做多线程内核,程序一般不会其使用内核线程,而是去使用内核线程的一种高级接口:轻量级进程,轻量级进程就是我们通常意义上的线程,由于每个轻量级进程都有一个内核线程支持,因此只有先支持内核线程,才能有轻量级进程(1:1关系),由于内核线程的支持,每个轻量级进程都成为一个独立的调度单元,即使有一个轻量级进程在系统中阻塞了,也不会影响整个进程的工作,但是轻量级进程有局限性:1.由于是基于内核线程实现的,所以线程的各种操作(创建,析构,同步)都需要进行系统调用,而系统调用的代价高,需要在用户态和内核态中来回切换,2.每个轻量级进程都需要一个内核线程的支持,因此轻量级进程要消耗一定的内核资源,因此系统支持的轻量级进程是有数量限制的

2.使用用户线程实现

完全建立在用户空间的线程库上的线程,系统内核不能感知线程的存在,用户线程的建立,同步,销毁和调度完全在用户态中实现,如果程序实现得当,这种线程不需要切换到内核态,操作可以快速和低消耗,可以支持规模更大的线程数量,部分高性能数据库中的多线程就是由用户线程实现的,但是由于不用切换到内核态,所以一些问题得不到内核的帮助,比如阻塞任何处理,多处理器系统中任何将线程映射到其他处理器上,这些问题解决起来异常困难

3.使用用户线程加轻量级进程混合实现

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

java体系中线程的调度

主要有两种调度方式:协同式线程调度,抢占式线程调度

1.协同式线程调度:线程的执行时间由自身控制,线程把工作执行完之后,通知系统切换到另一个线程上,协同式调度最大的好处就是实现简单,而且由于线程要把自己的事情干完才会进行线程切换,切换线程对自己也是可知的,所以不存在线程同步的问题,坏处就是线程执行时间不可控,甚至如果一个线程编写有问题,一直不告诉系统进行线程切换,那么程序就会阻塞

2.抢占式线程调度:每个线程将由系统来分配执行时间,线程的切换不由线程本身来决定,线程执行时间可控,不会有一个线程导致整个进程阻塞问题

“建议给某些线程多分配点时间”就引出了线程优先级的概念,优先级越高的线程越容易被系统选择执行

虽然很多操作系统都有线程的优先级,但是这些优先级不一定可以与java中的线程优先级一一对应!

java体系中线程的状态

java定义了5种线程状态,一个线程在任意一个时间点只能有其中一种状态!

1)新建:创建后尚未启动的线程

2)运行:包括操作系统中的正在运行和就绪两种状态,也就是处于此状态的线程可能正在运行或者等待cpu分配时间

3)等待:

*无限期等待:处于这种状态的线程不会被cpu分配执行时间,他们要等待被其他线程唤醒

*限期等待:处于这种状态的线程也不会被cpu分配执行时间,不过无需等待其他线程唤醒,在一定时间后可以由系统唤醒

4)阻塞:阻塞状态在等待获取一个排他锁

5)结束:已终止线程的线程状态

JAVA体系的线程的实现,线程的调度,状态的转换的更多相关文章

  1. Java基础图解,JVM,线程,Spring,TCP,SpringMVC等开发体系图解

    Java基础图解,JVM,线程,Spring,TCP,SpringMVC等开发体系图解 1.Java虚拟机运行时数据区图 2. 堆的默认分配图 3.方法区结构图 4.对象的内存布局图 5.对象头的Ma ...

  2. 死磕 java线程系列之线程池深入解析——未来任务执行流程

    (手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:线程池源码部分如无特殊说明均指ThreadPoolExecutor类. 简介 前面我们一起学习了线程池中普 ...

  3. Java 线程和操作系统的线程有啥区别?

    尽人事,听天命.博主东南大学硕士在读,携程 Java 后台开发暑期实习生,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收 ...

  4. 额!Java中用户线程和守护线程区别这么大?

    在 Java 语言中线程分为两类:用户线程和守护线程,而二者之间的区别却鲜有人知,所以本文磊哥带你来看二者之间的区别,以及守护线程需要注意的一些事项. 1.默认用户线程 Java 语言中无论是线程还是 ...

  5. 0039 Java学习笔记-多线程-线程控制、线程组

    join线程 假如A线程要B线程去完成一项任务,在B线程完成返回之前,不进行下一步执行,那么就可以调用B线程的join()方法 join()方法的重载: join():等待不限时间 join(long ...

  6. Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)

    线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public ...

  7. java多线程系类:JUC线程池:05之线程池原理(四)(转)

    概要 本章介绍线程池的拒绝策略.内容包括:拒绝策略介绍拒绝策略对比和示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3512947.html 拒绝策略 ...

  8. java多线程系类:JUC线程池:03之线程池原理(二)(转)

    概要 在前面一章"Java多线程系列--"JUC线程池"02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包 ...

  9. java多线程系类:JUC线程池:04之线程池原理(三)(转)

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509960.html 本章介绍线程池的生命周期.在"Java多线程系列--"基础篇& ...

随机推荐

  1. 2017-10-10 都市传说: "部分"中文出现乱码

    知乎原链, 作者亦本人 事情起源于项目另一开发者在中文Windows下构建时遇到的部分中文出现乱码问题. 当时很不解的是, 为什么会只有部分出现乱码. 第一感觉是, 如果编码转换不正确, 要么全乱码, ...

  2. 【读书笔记】iOS-UI Automation 需要遵守的规则

    1,被测试的应用程序必须是Developer签名的应用程序或者是运行在模拟器里面的应用程序. 2,在被测试的应用程序开发的过程中需要处理UI控件的可访问性.使用IB的开发工程师需要在XIB中加入一个A ...

  3. 关于jQuery出现的新添加元素点击事件无效

    //通常点击写法: $(".div").on('click', function () { var $this = $(this); var isActive = $this.ha ...

  4. 解决ie7,ie8下a链接无效问题

    .person a{ display: block; position: absolute; width: 109px; height: 33px; bottom: 19px; right: 40px ...

  5. SAP MM PIR里的Lower Limit & Upper Limit

    SAP MM PIR里的Lower Limit & Upper Limit 在PIR的价格的detail数据里,有2个字段:Lower Limit和Upper Limit.在今天之前,笔者从未 ...

  6. 转载---解决 eclipse 中发布的java-web工程,jar包无法发布到tomcat 的lib下。

    1.首先: Server Locations修改后会变灰,如果需要更改设置,则需要移除与Tomcat服务器关联的项目,同时,鼠标右键菜单Clean清除Tomcat服务器的状态^^就可以修改了. 此时E ...

  7. MySQL 性能优化--优化数据库结构之优化数据类型

    MySQL性能优化--优化数据库结构之优化数据类型   By:授客  QQ:1033553122   优化数字数据(Numeric Data) l   对于唯一ID或其它可用字符串或数字表示的值,选择 ...

  8. css文本属性用法总结

    稍稍总结了下css文本的一些属性用法,自己忘记的时候也可以用来查查,不用去查网站那么麻烦. 下面是部分总结,也希望对其他人有用 文本修饰 (1)text-decoration:  文本修饰(横线) 4 ...

  9. 自己写bitmap

    备注:1.原创文章,转载请标明出处: 2.欢迎建议和意见 3.我的实现是C语言,为了保护公司隐私,下述数据类型被我改了.实际上int应改是无符号4个字节的类型,byte是有符号1个字节,才能保证移植性 ...

  10. 03-12_MBean层次结构

    本文重点: Mbeans层次结构与WLST关系介绍 WebLogic Mbeans的类型 weblogic服务器的MBeans生命周期             Mbeans层次结构与WLST关系介绍: ...