美文网首页
java虚拟机读书笔记之线程调度

java虚拟机读书笔记之线程调度

作者: 暮雨沉沦 | 来源:发表于2017-05-19 23:42 被阅读30次

java线程调度

线程调度主要有两种方式,协同式线程调度和抢占式线程调度。
1、协同式:
     线程的执行时间由线程本身来控制,线程把自己的任务执行完之后,才会主动通知系统切换到另外一个线程中。
     优点:实现方式简单,切换操作对自己可知,没有线程同步的问题
     缺点:线程执行时间不可控制,如果线程编写有问题,会一直阻塞,相当不稳定。

2、抢占式:
     线程将有系统来分配执行时间,线程切换不是有本身来确定,除了调用Thread.yied()来让出cpu资源。
    优点:执行时间系统可控,不会导致阻塞的问题。java就是抢占式调度

java线程有10个优先级,可以设置优先级来建议系统的线程调度,但不是很靠谱,因为java线程还是通过映射到系统的线程上实现的,所以最终还是取决于操作系统。而且优先级可能会被系统自行改变。

线程状态
java中定义了5中线程状态,在任意一个时间点,一个线程只有其中的一种状态。
(1)新建(New) 创建后尚未启动。
(2)运行(Runnable):包括了操作系统线程状态中的Running和Ready,即处于这个状态的线程可能正在执行,也可能是等待cpu分配执行时间。
(3)无限期等待(Waiting):出于该状态时,线程不会被分配cpu执行时间,要等待被其他线程显式地唤醒。有几个方法会让线程陷入这种状态:a.没有超时时间的Object.wait() ;b.没有超时时间的Thread.join(); c.LockSupport.park().
(4)限期等待(Timed Waiting):出于这种状态的线程也不会被分配cpu执行时间,不过无需被其他线程显式地唤醒,一定时间后就可以由系统自动唤醒。有几个方法可以使线程进入这种状态:a.Thread.sleep(); b.设置了超时时间的Object.wait(); c.设置了超时时间的Thread.join(). d.LockSupport.parkNanos(); e.LockSupport.parkUntil().
(5)阻塞(Blocked):线程被阻塞了,与等待状态的区别是,阻塞状态在等待获取到一个排他锁,就是等待另一个线程放弃这个锁。而等待状态则是在等一段时间,或者唤醒动作的发生。在线程等待进入同步区域的时候,线程将进入这种状态。
(6)结束(Terminated):线程已经结束执行。

相关文章

  • java多线程

    Java线程调度和优先级 在各种线程中,Java虚拟机必须实现一个有优先权的,基于优先级的调度程序。每一个线程都会...

  • Android多线程

    什么是多线程? 线程是cpu调度的最小单位。java中,一个虚拟机实例对应着一个进程,进程中有n个线程,java为...

  • java虚拟机读书笔记之线程调度

    java线程调度 线程调度主要有两种方式,协同式线程调度和抢占式线程调度。1、协同式: 线程的执行时间由线程本身...

  • jvm内存模型的理解

    jvm内存模型的理解 Java虚拟机中根据是否对线程共享将内存分为了两个部分。 可知线程是操作系统调度的基本单位。...

  • Java线程模型

    Java线程模型 本文将从线程类型、线程通信、线程调度三个方面分析Java中的线程模型。 什么是线程? 线程就是进...

  • 并发--线程和锁

    线程调度 协同式调度 1.一个线程执行完毕之后再通知其他线程执行 抢占式调度(JAVA使用的是这种方式) 1.os...

  • E.JVM

    1、JVM定义 Java虚拟机包括程序计数器(线程私有),虚拟机栈(线程私有),本地方法栈(线程私有),Java堆...

  • Java基础学习备忘录(连载之:线程的生命周期)

    疑难困惑备忘录之:线程的生命周期问题。 线程:操作系统能够进行运算调度的最小单位 Java线程的生命周期,即:线程...

  • 线程优先级和守护线程

    线程优先级: Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定调度哪个...

  • java线程

    java 线程的方式 :抢占式调度 线程的方法:getName() //获取线程名字 getcurrentThre...

网友评论

      本文标题:java虚拟机读书笔记之线程调度

      本文链接:https://www.haomeiwen.com/subject/gmahxxtx.html