python多线程编程(2): 线程的创建、启动、挂起和退出

如上一节,python的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法。而创建自己的线程实例后,通过Thread类的start方法,可以启动该线程,交给python虚拟机进行调度,当该线程获得执行的机会时,就会调用run方法执行线程。让我们开始第一个例子:

# encoding: UTF-8import threadingimport time

class MyThread(threading.Thread):    def run(self):        for i in range(3):            time.sleep(1)            msg = "I'm "+self.name+' @ '+str(i)            print msgdef test():    for i in range(5):        t = MyThread()        t.start()if __name__ == '__main__':    test()

执行结果:

I'm Thread-1 @ 0
I'm Thread-2 @ 0
I'm Thread-5 @ 0
I'm Thread-3 @ 0
I'm Thread-4 @ 0
I'm Thread-3 @ 1
I'm Thread-4 @ 1
I'm Thread-5 @ 1
I'm Thread-1 @ 1
I'm Thread-2 @ 1
I'm Thread-4 @ 2
I'm Thread-5 @ 2
I'm Thread-2 @ 2
I'm Thread-1 @ 2
I'm Thread-3 @ 2

从代码和执行结果我们可以看出,多线程程序的执行顺序是不确定的。当执行到sleep语句时,线程将被阻塞(Blocked),到sleep结束后,线程进入就绪(Runnable)状态,等待调度。而线程调度将自行选择一个线程执行。上面的代码中只能保证每个线程都运行完整个run函数,但是线程的启动顺序、run函数中每次循环的执行顺序都不能确定。
此外需要注意的是:
1.每个线程一定会有一个名字,尽管上面的例子中没有指定线程对象的name,但是python会自动为线程指定一个名字。
2.当线程的run()方法结束时该线程完成。
3. 无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式。

上面的例子只是简单的演示了创建了线程、主动挂起以及退出线程。下一节,将讨论用互斥锁进行线程同步。

多线程编程(2): 线程的创建、启动、挂起和退出相关推荐

  1. python多线程编程(2): 线程的创建、启动、挂起和退出

    From: http://www.cnblogs.com/holbrook/archive/2012/03/02/2376940.html 如上一节,python的threading.Thread类有 ...

  2. VC多线程编程之线程创建与示例

    一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX ...

  3. C#多线程编程实例 线程与窗体交互

    C#多线程编程实例 线程与窗体交互 代码: public partial class Form1 : Form{//声明线程数组Thread[] workThreads = new Thread[10 ...

  4. 多线程编程:线程死锁的原因以及解决方法

    多线程编程:线程死锁的原因以及解决方法 关于线程死锁这个问题相信程序员在编写多线程程序时会经常遇到的一个经典问题,这种情况往往出现在多个线程同时对临界资源访问时所产生的. 属于临界资源的硬件有打印机. ...

  5. 多线程编程之三——线程间通讯

    七.线程间通讯 一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样,主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信.这种线程间的通信不但是难以避免的,而 ...

  6. Python多线程编程之线程子类化

    Python多线程编程之线程子类化 基本思路 Threading模块简介 **MyThread**主要代码 实例 所有代码 运行结果 基本思路 导入Threading模块下的Thread类,将其子类化 ...

  7. 七. 多线程编程11.线程的挂起、恢复和终止

    有时,线程的挂起是很有用的.例如,一个独立的线程可以用来显示当日的时间.如果用户不希望用时钟,线程被挂起.在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事. 挂起,终止和恢复线 ...

  8. Win32多线程编程(3) — 线程同步与通信

    一.线程间数据通信 系统从进程的地址空间中分配内存给线程栈使用.新线程与创建它的线程在相同的进程上下文中运行.因此,新线程可以访问进程内核对象的所有句柄.进程中的所有内存以及同一个进程中其他所有线程的 ...

  9. Win32多线程编程(2) — 线程控制

    Win32线程控制只有是围绕线程这一内核对象的创建.挂起.恢复.终结以及通信等操作,这些操作都依赖于Win32操作系统提供的一组API和具体编译器的C运行时库函数.本篇围绕这些操作接口介绍在Windo ...

最新文章

  1. 关于笔记本电脑玩一些游戏不能全屏的注册表修改法
  2. filegee为啥没变动也更新_2020/10/07|02=下一步行动|evernote更新以及后续影响
  3. 新版本的Selenium 4 Alpha会有什么期望?
  4. 百度前端技术学院,学习第一天。
  5. 这可能是最适合C++学习者的书单
  6. C++语言基础 —— STL —— 容器与迭代器 —— pair
  7. 关于AfxMessageBox没有重载函数
  8. Linux学习笔记:wc查看文件字节数、字数、行数
  9. 维修手册 html 打开,汽车维修手册大全.pdf
  10. 2021.04.02学习记录列表
  11. 三菱q系列plc连接电脑步骤_SERVER和三菱Q系列PLC通讯设置步骤
  12. C++11多线程 内存序(std::memory_order_relaxed)
  13. WebRTC收集网卡地址信息 源码剖析
  14. 激光雷达进入「规模化」上车周期?最大变数是什么?
  15. arcgis里dem填洼_基于多尺度窗口的DEM局部填洼方法
  16. java16进制字符串与字符串互相转换
  17. [转]IE、FireFox、Chrome浏览器中关于URL传参中文乱码,解决兼容性问题!
  18. 混沌精英哈里斯鹰优化算法-附代码
  19. PyTorch实战6:好莱坞明星识别--VGG16
  20. 脑洞大开:为啥帧率达到 60 fps 就流畅?

热门文章

  1. 对于android和iphone计划
  2. 关于MYSQL的 insert 的一些方法说明
  3. 什么是抽象类?抽象类的作用_Java面试题amp;和amp;amp;的作用和区别
  4. 使用FragmentTabHost+Fragment+viewpager 实现滑动分页
  5. Nginx中conf相关配置的简要说明
  6. ERP项目实施记录05
  7. android 使用GridView实现Gallery的效果,并且从最左边开始
  8. android.app.instrumentation解析
  9. 持续集成之 Jenkins+Gitlab 打包发布程序到 Tomcat(二)
  10. 图说 WebAssembly(二):JIT 编译器