一、join 方法的主要作用是阻塞, 阻塞的对象是谁?

答:阻塞的对象是主线程,可以达到控制主线程什么时候结束的作用。

1、没有join

此时主线程和子线程相当于齐头并进,主线程不会等待子线程执行完了再结束,即不会阻塞

实验代码:

# coding: utf-8
# 测试多线程中join的功能
import threading, timedef doWaiting():print('start waiting1: ' + time.strftime('%H:%M:%S') + "\n" )time.sleep(3)print('stop waiting1: ' + time.strftime('%H:%M:%S') + "\n")def doWaiting1():print('start waiting2: ' + time.strftime('%H:%M:%S') + "\n")time.sleep(8)print('stop waiting2: ', time.strftime('%H:%M:%S') + "\n")if __name__ == '__main__':tsk = []thread1 = threading.Thread(target = doWaiting)thread1.start()tsk.append(thread1)thread2 = threading.Thread(target = doWaiting1)thread2.start()tsk.append(thread2)# print('start join: ' + time.strftime('%H:%M:%S') + "\n")# for tt in tsk:#     tt.join()print('end main thread: ' + time.strftime('%H:%M:%S') + "\n")

执行结果及分析:

2、有join

当主线程内的子线程都start后,主线程会阻塞并等待子线程执行完才继续执行,直观的表现是:子线程都start后,主线程若还有未执行的代码,此时不会继续执行剩余代码,而是等待子线程都执行完后再执行
if __name__ == '__main__':tsk = []thread1 = threading.Thread(target = doWaiting)thread1.start()tsk.append(thread1)thread2 = threading.Thread(target = doWaiting1)thread2.start()tsk.append(thread2)print('start join: ' + time.strftime('%H:%M:%S') + "\n")for tt in tsk:tt.join()print('end main thread: ' + time.strftime('%H:%M:%S') + "\n")

执行结果及分析:

3、有join且传入阻塞时间time

主线程最长阻塞时间: 子线程数*join传入参数time,当每个子线程都执行了time时间甚至更长时,主线程才有可能达到这么长的阻塞时间。

注意:即使是主线程结束阻塞后执行完剩余代码,子线程也会继续执行,而不会随着主线程的结束而终止。

if __name__ == '__main__':tsk = []thread1 = threading.Thread(target = doWaiting)thread1.start()tsk.append(thread1)thread2 = threading.Thread(target = doWaiting1)thread2.start()tsk.append(thread2)print('start join: ' + time.strftime('%H:%M:%S') + "\n")for tt in tsk:tt.join(3)print('end main thread: ' + time.strftime('%H:%M:%S') + "\n")

结果分析;

python 的 Thread.join方法相关推荐

  1. java并发编程之thread.join()方法详解

    thread.join()方法的作用:保证线程的执行结果的可见性.原理是通过阻塞主线程实现的. 代码Demo如下: public class ThreadJoinDemo {public static ...

  2. 高并发编程-Thread#join方法的使用及使用场景分析

    文章目录 含义 方法及示例 void join() void join(long millis) join(long millis, int nanos) 使用场景分析 含义 翻看下源码的注释: Wa ...

  3. python中的join方法

    描述 Python中的join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 'sep'.join(sequence) 参数 sequence:要连接的元素序列,可以是元组.列 ...

  4. python里的join方法_python中join()方法介绍

    描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str . join ( sequence ) 参数 sequence -- ...

  5. Thread.Join()方法的理解

    关于C#中Thread.Join()的一点理解 今天是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解. Thread.Join()在MSDN中 ...

  6. python join_Python中join()方法的用法

    Python中join()方法的主要作用是以特定的字符或字符串作为分隔符(字符串)将若干字符串拼接在一起.其作用的对象可以是单独的一个字符串,也可以是一个字符串元组,字符串列表.字符串集合或字符串字典 ...

  7. python join_python中join()方法介绍

    描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法:str.join(sequence) 参数 sequence -- 要连接的元 ...

  8. Python 字符串的join方法

    标题 字符串操作中的join方法 通常,我们拿到一个字符串后,需要对字符串进行处理加工,也就是说数据的清洗后,我们才可以使用,常用的字符串操作广泛应用在网络爬虫以及web应用开发中,以及服务器运维等方 ...

  9. python 线程类 threading.Thread.join() 方法 (自闭,不让别人进来了)

    def join(self, timeout=None):"""Wait until the thread terminates. 等待线程终止.This blocks ...

最新文章

  1. 用 Python 爬了点你们喜欢的小电影
  2. 360°透视:云原生架构及设计原则
  3. CSS 中功能相似伪类间的区别
  4. 知乎完成 2.7 亿美元 E 轮融资 加速建设全民知识内容平台(附周源全员邮件全文)...
  5. 求n!中含有某个因子个数的方法
  6. 写入mysql_MySQL写入缓冲区在数据库中的作用( Change Buffer )
  7. solr5.3.1 mysql_Solr5.3.1 dataimport 导入mysql数据
  8. debian8.8安装谷歌浏览器
  9. matlab中文帮助_拿走不谢,simulink,stateflow,ecoder帮助手册中英对照版首发
  10. ahb总线协议主机_IIC协议学习笔记
  11. 英文写作中常用的转折,并列词组
  12. 文明与征服李世民最强阵容推荐
  13. xcode5 自定义模板
  14. 5张图,看懂数据分析体系
  15. 2019年c++/c,java,python,前端,数据结构,ps等资料大全
  16. 虎从风跃,龙借云行--神行者Wi10无线移动硬盘开启WIFI无线存储共享新时代_MID论坛_太平洋电脑网产品论坛...
  17. 传感器网络知识点总结
  18. Python 打造基于有道翻译的命令行翻译工具(命令行爱好者必备)
  19. 如何快速掌握正确的UI配色方案?6种技巧不容错过!(转载)
  20. java -jar xx.jar是如何运行的

热门文章

  1. C++64位数据格式化输出
  2. 【3D形状检索指标】The Princeton Shape Benchmark
  3. 华三AP加AC本地转发配置案例
  4. java sse实例_使用SSE指令
  5. 出现死链有哪些原因?对网站有哪些影响?
  6. Android 如何使Tablayout内容和下划线长度相同?
  7. 利用 Windows 动态锁实现自动锁屏
  8. DLP客户端显示脱机的问题处理方法
  9. opensslErrorStack: [ ‘error:03000086:digital envelope routines::initialization error‘ ]
  10. 2023 抖音塔防直播项目 附软件和教程