zoukankan      html  css  js  c++  java
  • 线程的生命周期

    生命周期的五种状态,新建、就绪、运行、堵塞、死亡。

    新建(new Thread)

    当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。例如:Thread  t1=new Thread();

    就绪(runnable)

    调用Thread类的start方法,线程已经被启动,进入就绪状态,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。

    运行(running)

    线程获得CPU资源正在执行任务(执行run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束或者时间片结束。

    堵塞(blocked)

    由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。阻塞结束后线程进入就绪状态。

    死亡(dead)

    当线程执行完毕(run方法运行结束)或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。

    一个线程会因为以下原因而放弃CPU:

    1. 时间片用完了,java虚拟机让当前线程暂时放弃CPU,转到就绪状态,使其它线程获得运行机会。

    2. 当前线程因为某些原因而进入阻塞状态

    3. 线程结束运行

    线程在以下情况会停止:

    1. run方法正常执行完毕

    2. run方法执行过程中抛出一个未捕获的异常

    3. 调用stop方法(不推荐使用)

    进程的停止,当一个进程中所有的前台线程停止后,该进程结束。

    如果希望明确地让一个线程给另外一个线程运行的机会,可以采取以下办法。

    1. 调整各个线程的优先级

    2. 让处于运行状态的线程调用Thread.sleep()方法

    3. 让处于运行状态的线程调用Thread.yield()方法

    4. 让处于运行状态的线程调用另一个线程的join()方法

  • 相关阅读:
    shell加载配置文件
    Shell四种运行方式(启动方式)
    Linux下Fork与Exec使用
    ln -snf 的个人理解
    利用python3将已有的某几个pptx文件的某些slides来生成新的pptx文件的范例
    如何在centos7中安装python3
    ng-include
    ng-class细说 by破狼
    AngularJS的Filter用法详解
    理解angularjs中的$emit,$broadcast和$on by Four
  • 原文地址:https://www.cnblogs.com/qin-derella/p/6588419.html
Copyright © 2011-2022 走看看