Thread实例对象的方法

  # isAlive(): 返回线程是否活动的。# getName(): 返回线程名。# setName(): 设置线程名。

threading模块提供的一些方法:

  # threading.currentThread(): 返回当前的线程变量。# threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。# threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
import threading
from threading import Threaddef task():import timetime.sleep(2)print("Thread name =", threading.current_thread().getName())if __name__ == '__main__':thread = Thread(target=task)thread.start()print("Before join thread is alive:", thread.is_alive())thread.join()print("After join thread is alive:", thread.is_alive())print("Threading enumerate:", threading.enumerate())print("Threading active count:", threading.active_count())print("MainThread:", threading.current_thread())print("MainThread name:", threading.current_thread().getName())

输出结果为:

Before join thread is alive: True
Thread name = Thread-1
After join thread is alive: False
Threading enumerate: [<_MainThread(MainThread, started 3868)>]
Threading active count: 1
MainThread: <_MainThread(MainThread, started 3868)>
MainThread name: MainThread

守护线程

无论是进程还是线程,都遵循:守护xxx会等待主xxx运行完毕后被销毁。

需要强调的是:运行完毕并非终止运行,对主进程来说,运行完毕指的是主进程代码运行完毕,对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕。

主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束。

主线程在其他非守护线程运行完毕后才算运行完毕(守护线程在此时就被回收),因为主线程的结束意味着进程的结束,进程整体的资源都将被回收,而进程必须保证非守护线程都运行完毕后才能结束。

来看一个例子验证一下我们的说法:

import time
from threading import Threaddef thread1():print("Thread 1 is start.")time.sleep(1)print("Thread 1 is done.")def thread2():print("Thread 2 is start.")time.sleep(2)print("Thread 2 is done.")if __name__ == '__main__':thread1 = Thread(target=thread1)thread2 = Thread(target=thread2)thread2.daemon = Truethread1.start()thread2.start()print("Under thread 1 and thread 2 start.")

输出结果为:

Thread 1 is start.
Thread 2 is start.
Under thread 1 and thread 2 start.
Thread 1 is done.

thread2是守护线程,也就是说thread2会等到除主线程之外的非守护线程全死了之后才死,thread1睡一秒,就结束,而thread2要睡两秒,所以当thread2还在沉睡的时候thread1就已经死了,非守护进程thread1死了之后,主线程也跟着死了,主线程一死,守护线程thread2也得死,所以Thread 2 id done没有输出。

并发编程——线程——Thread对象的属性和方法相关推荐

  1. 并发编程——进程——Process对象的属性和方法

    pid属性和ppid属性 其实到现在为止,都是我说咱们是另外开启了一个进程,并没有实际证据证明,怎么证明呢? 我们知道,程序中的变量都是由id的,其实就是内存地址,那么,进程也可以查看自己的id,进程 ...

  2. Java并发编程:Thread类的使用

    为什么80%的码农都做不了架构师?>>>    Java并发编程:Thread类的使用 在前面2篇文章分别讲到了线程和进程的由来.以及如何在Java中怎么创建线程和进程.今天我们来学 ...

  3. python 线程同步_Python并发编程-线程同步(线程安全)

    Python并发编程-线程同步(线程安全) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 线程同步,线程间协调,通过某种技术,让一个线程访问某些数据时,其它线程不能访问这些数据,直 ...

  4. 判断线程是否执行完毕_Java并发编程 | 线程核心机制,基础概念扩展

    源码地址:GitHub || GitEE 一.线程基本机制 1.概念描述 并发编程的特点是:可以将程序划分为多个分离且独立运行的任务,通过线程来驱动这些独立的任务执行,从而提升整体的效率.下面提供一个 ...

  5. 高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析

    文章目录 概述 jstack或者可视化工具检测是否死锁(没有) 原因分析 概述 高并发编程-线程通信_使用wait和notify进行线程间的通信 - 遗留问题 我们看到了 应用卡住了 .... 怀疑是 ...

  6. Java 并发编程 -- 线程池源码实战

    一.概述 小编在网上看了好多的关于线程池原理.源码分析相关的文章,但是说实话,没有一篇让我觉得读完之后豁然开朗,完完全全的明白线程池,要么写的太简单,只写了一点皮毛,要么就是是晦涩难懂,看完之后几乎都 ...

  7. 并发编程——线程协作

    并发编程--线程协作 ​ 前面学习了线程,那么并发编程中,如何协调多个线程来开发呢? Semaphore ​ 信号量跟前面将的同步互斥解决方案--信号量是一个东西,这是JDK的信号量实现. 源码分析 ...

  8. 高阶Day1:面向对象,面向过程,类和对象的属性和方法创建

    高阶Day1:面向对象,面向过程,类和对象的属性和方法创建 高级编程学习4个内容: 面向对象 MySQL数据库 网络编程 并发编程 面向过程(POP)与面向对象(OOP): 类和对象: 类名的定义: ...

  9. HTML中DOM对象的属性和方法的层级关系是怎样的?(目录即层次)

    HTML中DOM对象的属性和方法的层级关系是怎样的?(目录即层次) 一.总结 一句话总结:目录就是测试题 1.document取得元素(get element)的方式有哪几种? 解答:四种,分别是id ...

最新文章

  1. 如何判断第一位是1_如何快速判断1瓶红酒的价格,防止被坑?
  2. python 字典 转 pandas DataFrame
  3. python列表切片口诀-切片 - 廖雪峰的官方网站
  4. 华南理工计算机考试题,华南理工考研计算机历年真题
  5. java 整数加减_JAVA超大整数的加法如何改成减法
  6. 手把手教你玩转SOCKET模型:重叠I/O篇
  7. JAVA捕捉输入格式异常_Java学习(四).异常处理
  8. 土是独体字结构吗_205砂浆、混凝土强度等级与定额不同时,你会调整换算吗?...
  9. html 隐藏hide,jQuery UI 实例
  10. php怎么异步执行,php中异步执行的四种方式
  11. 7-24 求集合数据的均方差 (15 分)
  12. 如何使用kafka增加topic的备份数量,让业务更上一层楼
  13. C#WinForm的TextBox 按TAB键让光标按照指定顺序走
  14. python 全栈开发,Day126(创业故事,软件部需求,内容采集,显示内容图文列表,MongoDB数据导入导出JSON)...
  15. 大型体检系统源码,PEIS医院体检管理系统源码
  16. 可汗学院公开课:线性代数笔记-11-求解三元方程组
  17. 2021美赛C题解题思路(Confirming the Buzz about Hornets)
  18. U盘格式化后空间变小解决方案(常用于做过系统盘的U盘)
  19. stm32外部中断问题(每次stm32进行系统复位按键控制NRST=0,程序立马进入中断服务函数)
  20. 莫队和带修莫队 学习笔记

热门文章

  1. iOS NSNotificationCenter详解
  2. HDU 4549 M斐波那契数列
  3. asp.net mvc 正常支持Fckeditor编辑器
  4. group_concat 不是可以识别的 内置函数名称。_Python 函数库 APIs 编写指南
  5. mysql编译方式安装_mysql编译方式安装
  6. 浅谈APP的分享功能,有时候社交裂变形式比内容更“重要”
  7. spring boot apollo demo
  8. Java面试题之HashMap如何有效减少碰撞
  9. PHP设计模式 - 门面模式
  10. python——数据类型