zoukankan      html  css  js  c++  java
  • 多线程编程-- part 2 线程的生命周期和优先级

    线程的创建到消亡的历程:

    java多线程的5种状态:

    (1)New(新建)

      new Thread(run()) 该线程还没开始运行,状态是new,在程序运行前还有一些基础工作要做

    (2)runnable(就绪)

      一旦调用start()方法,线程就处于runnable状态,可运行的线程可能正在运行,也可能没有运行,取决于操作系统给线程的时间片,放在可运行线程池中,等待CPU的使用权

    (3)Blocked(阻塞)

      阻塞状态是线程因为某种原因放弃了CPU使用权,暂时停止运行,直到线程进入就绪状态。阻塞情况分三种:

      1.等待状态:运行状态线程执行wait()方法,JVM把该线程放入等待池中

      2.同步阻塞:线程获取对象的同步锁,锁被别的线程占用,JVM把线程放入锁池中

      3.其他阻塞:线程执行sleep,join,或者发出I/O请求,JVM把线程置为阻塞状态,sleep超时,join等待线程终止或超时,或者I/O处理完毕,线程重新进入就绪状态

    (4)running(运行)

      就绪状态线程获取CPU时间片,开始执行代码

    (5)dead(死亡)

      线程run(),main()方法执行完毕结束,或者因异常退出了run()方法,则该线程结束生命周期,死亡的线程不可再次复生。

    线程的优先级:

      线程的优先级是为了在多线程环境便于系统对线程的调度,优先级高的线程优先执行,但是不能依靠线程的优先级来决定线程的执行顺序。

      线程创建时,子继承父的优先级,可通过setPriority()方法改变优先级,默认值是5,范围1-10

    线程调度策略:

      线程调度器会选择优先级更高的线程运行,但是发生以下情况,会终止线程的运行:

    (1)调用yield()方法,让出了对CPU的占用

    (2)调用了sleep()方法

    (3)线程进行I/O操作而受阻

    (4)另一个更高优先级的线程出现

    (5)该线程的时间片用完

  • 相关阅读:
    JQuery基础知识--方便忘记时查看
    关于jquery.validate.js的用法
    JQuery ajax提交表单及表单验证
    thinkphp rabc权限总结
    关于jquery ajax项目总结
    中国剩余定理及其拓展 CRT&EXGCD
    bzoj 4899 记忆的轮廓 题解(概率dp+决策单调性优化)
    bzoj3307 雨天的尾巴题解及改题过程(线段树合并+lca+树上差分)
    20190614考试心态爆炸记
    fhq Treap(无旋Treap)
  • 原文地址:https://www.cnblogs.com/jijiji/p/6895748.html
Copyright © 2011-2022 走看看