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)该线程的时间片用完

  • 相关阅读:
    This counter can increment, decrement or skip ahead by an arbitrary amount
    LUT4/MUXF5/MUXF6 logic : Multiplexer 8:1
    synthesisable VHDL for a fixed ratio frequency divider
    Bucket Brigade FIFO SRL16E ( VHDL )
    srl16e fifo verilog
    DualPort Block RAM with Two Write Ports and Bytewide Write Enable in ReadFirst Mode
    Parametrilayze based on SRL16 shift register FIFO
    stm32 spi sdcard fatfs
    SPI bus master for System09 (2)
    SQLSERVER中的自旋锁
  • 原文地址:https://www.cnblogs.com/jijiji/p/6895748.html
Copyright © 2011-2022 走看看