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

  • 相关阅读:
    KVM之一:安装准备(基于CentOS6.7)
    Nginx技巧——Nginx/Apache下禁止指定目录运行PHP脚本(转自运维之美)
    (转)关于 awk 的 pattern(模式)
    form验证里使用request 和前端倒计时
    restful 在接口中获取 传过来的值
    django使用celery
    celery
    restful 在接口中获取 request.user
    码云创建一个仓库
    django中local_settings的配置
  • 原文地址:https://www.cnblogs.com/jijiji/p/6895748.html
Copyright © 2020-2023  润新知