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

    线程的生命周期

    所谓的xx生命周期,其实就是某对象的包含产生和销毁的一张状态图。线程的生命周期如下图所示:

    各状态的说明如下:
    1. New新建。新创建的线程经过初始化后,进入Runnable状态。
    2. Runnable就绪。等待线程调度。调度后进入运行状态。
    3. Running运行。
    4. Blocked阻塞。暂停运行,解除阻塞后进入Runnable状态重新等待调度。
    5. Dead消亡。线程方法执行完毕返回或者异常终止。
    可能有3种情况从Running进入Blocked:
    • 同步:线程中获取同步锁,但是资源已经被其他线程锁定时,进入Locked状态,直到该资源可获取(获取的顺序由Lock队列控制)
    • 睡眠:线程运行sleep()或join()方法后,线程进入Sleeping状态。区别在于sleep等待固定的时间,而join是等待子线程执行完。sleep()确保先运行其他线程中的方法。当然join也可以指定一个“超时时间”。从语义上来说,如果两个线程a,b, 在a中调用b.join(),相当于合并(join)成一个线程。将会使主调线程(即a)堵塞(暂停运行, 不占用CPU资源), 直到被调用线程运行结束或超时, 参数timeout是一个数值类型,表示超时时间,如果未提供该参数,那么主调线程将一直堵塞到被调线程结束。最常见的情况是在主线程中join所有的子线程。
    • 等待:线程中执行wait()方法后,线程进入Waiting状态,等待其他线程的通知(notify)。wait方法释放内部所占用的琐,同时线程被挂起,直至接收到通知被唤醒或超时(如果提供了timeout参数的话)。当线程被唤醒并重新占有琐的时候,程序才会继续执行下去。

     threading.Lock()不允许同一线程多次acquire(), 而RLock允许, 即多次出现acquire和release

  • 相关阅读:
    55个高质量个性的Photoshop的笔刷
    60个Web设计师必看的教程
    30个高质量的旅游网站设计
    65非常棒的photoshop框架笔刷
    55个非常有创意的博客和出版字体
    30个最好的免费的WordPress主题
    15非常酷且反应快的jQuery slider插件
    65个漂亮的WordPress博客主题
    45个触发创作灵感的技术类网站设计资源
    55个高质量的Magento主题,助你构建电子商务站点
  • 原文地址:https://www.cnblogs.com/JohnABC/p/4023100.html
Copyright © 2011-2022 走看看