zoukankan      html  css  js  c++  java
  • Java线程

    一、线程是什么

      线程是比进程更轻量的调度单位,线程可以共享进程资源(内存地址、文件I/O等),又可以独自调度。

      Java中,线程是处理器执行调度的最基本单位。

      主流操作系统都提供了线程实现,Java语言提供了不同操作系统平台和不同硬件下对线程的同一处理。

    二、线程分类

      1. 内核线程

        内核线程(Kernel-level Thread,KLT)是操作系统内核支持的线程,操作系统内核通过操作调度器(Scheduler)对内核线程进行调度切换,并将内核线程任务映射到各个处理器上,内核线程可以称为处理器的分身。从而让每个处理器具有处理多事务的能力。支持多线程的内核称为多线程内核(Multi-Threads Kernel)。由于受内核和处理器限制,内核线程数是受限的,不能大规模创建和并发。

      2. 轻量级进程

        轻量级进程是指内核线程的高级接口,每个轻量级进程都需要内核线程支持。通常开发不会直接使用内核线程,而是通过内核线程的高级接口使用轻量级进程,轻量级进程通常也称为用户线程。轻量级进程和内核线程是1对1的关系。

      3. 用户线程

        广义上说只要不是内核线程都是用户线程,从定义上轻量级进程也属于用户线程,但是,轻量级进程的调度是建立在系统内核之上的,是由操作系统进行调度的,在效率上收到限制,不具备用户线程的优点。

        狭义上说,用户线程是建立在用户空间的线程,系统内核是感知不到用户空间的线程的,用户空间的线程的建立、同步、销毁、调度都是有用户空间自己完成的,不需要内核的帮助。

    三、线程模型

      1. 1对1关系的内核线程和轻量级进程

       由于轻量级进程是内核线程支持的,即使某个轻量级进程被堵塞了,也不会影响整个进程继续工作。轻量级进程也有一定的局限,由于轻量级进程是内核线程支持的,轻量级进程的创建、析构、同步都需要系统调用,而系统调用代价相对较高,需要在内核态和用户态进行切换。

      2. 1对N关系的进程和用户线程

      3. N对M关系混合模式

      内核线程和用户线程一起使用的模式,就是多对多的关系,这种关系下即有用户线程,也有轻量级进程。用户线程依然建立在用户空间,用户线程的建立、切换、析构和同步都需要用户空间维护,可以支持大规模并发实现。

    三、Java线程的实现

      《Java虚拟机规范》没有对线程的实现做约束,在JDK 1.2前统一称为“绿色线程”的用户线程实现。在JDK 1.3后,主流平台Java虚拟机采用基于操作系统的内核线程模型实现的,也就是1对1关系的线程模型。其他平台也才用不同的线程实现模型。

    四、并发模型

      1. 1对1关系的线程模型

        1对1关系的线程模型坏处是用户线程映射到系统的内核线程上,就是用户态和内核态切换,所以,切换的调度成本相对较高。

      2. 协程

        协程分为有栈协程和无栈协程,在Java中实现的是有栈协程,可以使用独立协程库Quasar。

  • 相关阅读:
    DOM、Window对象操作
    JavaScript基础
    关于样式表的两个练习
    css样式表
    表单
    HTML的格式、内容容器、表格标签
    C#部分的总结
    Android自定义View之音频条形图
    String, StringBuilder, StringBuffer问题
    详解Java中ArrayList、Vector、LinkedList三者的异同点(转)
  • 原文地址:https://www.cnblogs.com/naray/p/15448772.html
Copyright © 2011-2022 走看看