14.线程进阶操作(join,setDaemon)
1.主线程与子线程
主线程与子线程的概念-----------------------------
主线程:当一个程序启动时,就有一个线程开始运行(由上往下运行)该线程通常叫做程序的主线程子线程:因为程序是开始时就执行的,如果需要再创建线程,那么创建的线程就是这个主线程的子线程主线程的重要性体现在两个方面:1.是产生其子线程的线程2.通常它必须最后完成执行,比如执行各种关闭操作
2.join
join: 阻塞调用程序(主线程),直到调用join的子线程结束(转下一个添加了join的子线程结束,所有添加了join的子线程结束)才会继续执行主线程join原理: 依次判断线程池中线程是否结束,没有结束就阻塞主线程直到结束,这个线程池当中的线程结束了,就会跳到下一个有join的线程中
# 正常import threading
import timedef run(name):print('*'*30, f'Child thread: {name}', '*'*30)time.sleep(2)print('子线程结束')th_yuan = threading.Thread(target=run, args=('测试1',))
th_yuan.start()
print('主线程结束')"""****************************** Child thread: 测试1 ******************************
主线程结束
子线程结束"""
# join阻塞主线程import threading
import timedef run(name):print('*'*30, f'Child thread: {name}', '*'*30)time.sleep(2)print('子线程结束')th_yuan = threading.Thread(target=run, args=('测试1',))
th_yuan.start()
th_yuan.join()
print('主线程结束')"""****************************** Child thread: 测试1 ******************************
子线程结束
主线程结束"""
3.setDaemon
setDaemon与join基本上是相对的,join会等子线程执行完;而setDaemon不会setDaemon:守护线程---主线程结束,子线程也跟着结束
# 正常import threading
import timedef demo(name):print('*'*30, f'Child thread: {name}', '*'*30)time.sleep(2)print('子线程结束')th_yuan = threading.Thread(target=demo, args=('测试2',))
th_yuan.start()
print('主线程结束')"""****************************** Child thread: 测试2 ******************************
主线程结束
子线程结束"""
# setDaemon守护线程import threading
import timedef demo(name):print('*'*30, f'Child thread: {name}', '*'*30)time.sleep(2)print('子线程结束')th_yuan = threading.Thread(target=demo, args=('测试2',))
th_yuan.setDaemon(True)
th_yuan.start()print('主线程结束')"""
****************************** Child thread: 测试2 ******************************
主线程结束
"""
14.线程进阶操作(join,setDaemon)相关推荐
- java_关于线程常用操作及同步锁
线程API: 常用构造器: 常用方法: 线程调度: 守护线程: 其他堵塞的两个方法 同步锁: 等待阻塞 线程API: 常用构造器: Thread(Runnable r)创建一个指定任务的线程对象Thr ...
- 【JUC多线程与高并发】线程进阶,性能优化之无锁
多线程进阶,性能优化之无锁 比较交换(CAS) 线程安全整数类:AtomicInteger CAS底层原理:Unsafe类 CAS缺点: ABA问题的解决 原子引用:AtomicReference 原 ...
- python threading setdaemon_Python线程为什么搞个setDaemon
渣渣飞 渣渣飞,长年在票圈深夜放毒,是网易游戏高级运维工程师,对代码性能及系统原理饶有兴趣,三人行,必有我师.现负责监控相关业务开发. 前言 使用 Python 都不会错过线程这个知识,但是每次谈到线 ...
- Scala数组的基本操作,数组进阶操作,多维数组
1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...
- 厚积薄发,丰富的公用类库积累,助你高效进行系统开发(11)---各种线程相关操作类...
俗话说,一个好汉十个帮,众人拾柴火焰高等都说明一个道理,有更多的资源,更丰富的积累,都是助你走向成功,走向顶峰的推动力. 本篇的公用类库的介绍主题是程序开发中多线程操作环境中,常用到的线程相关类,本篇 ...
- ffplay分析(视频解码线程的操作)
<ffplay的数据结构分析> <ffplay分析(从启动到读取线程的操作)> <ffplay分析(音频解码线程的操作)> <ffplay 分析(音频从Fra ...
- python_线程读写操作一
线程读写操作 import threading,random,queue q = queue.Queue() alist=[] def shengchan():for i in range(10):a ...
- 27_线程安全操作及其案例
01线程操作共享数据的安全问题 *A:线程操作共享数据的安全问题 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码. 程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的 ...
- Django中的ORM进阶操作
Django中的ORM进阶操作 Django中是通过ORM来操作数据库的,通过ORM可以很easy的实现与数据库的交互.但是仍然有几种操作是非常绕也特别容易混淆的.于是,针对这一块,来一个分类总结吧. ...
最新文章
- 生成式对抗网络GAN有哪些最新的发展,可以实际应用到哪些场景中
- struts 数据库连接
- Navicat Premium无法连上ORACLE数据库的几种问题解决方法
- python代码需要背吗-Python面试必须要看的15个问题
- python基础6(来自廖雪峰的官方网站)
- 服务器于本地间进行复制粘贴
- 【数据结构与算法】之深入解析“地下城游戏”的求解思路与算法示例
- 基础训练——合并电话簿
- 为什么分布式一定要有redis,redis的一些优缺点
- JQuery EasyUI DataGrid 、tree查询
- http和https的区别与联系
- cvtres.exe无法正常启动_启动盘介绍
- 关于iOS中MVC和MVVM的区别和联系
- 更改SQL数据库的繁体数据为简体
- Java 容器之 Connection栈队列及一些常用
- MyBatis:Pagehelper分页
- 一个网页如何决定是当前页打开还是新窗口打开?
- 在fstab中使用UUID挂载
- java+widthstep,OpenCV 中结构体IplImage 成员width,widthStep使用注意事项
- Visual Studio内存泄露检测工具