join方法的作用是同步线程。

1、不使用join方法:当设置多个线程时,在一般情况下(无守护线程,setDeamon=False),多个线程同时启动,主线程执行完,会等待其他子线程执行完,程序才会退出。

def print_number(num):

    print("-----> %d" % num, time.ctime())
time.sleep(5)
print("print_number ending......", time.ctime()) def print_letter(letter): print("-----> %s" % letter, time.ctime())
time.sleep(10)
print("print_letter ending......", time.ctime()) t1 = threading.Thread(target=print_number,args=(10,))
t2 = threading.Thread(target=print_letter,args=('hello',)) if __name__ == '__main__':
t1.start()
t2.start() print("Main thread ended...")

显示结果如下:

-----> 10 Wed Mar 20 09:22:30 2019
-----> hello Wed Mar 20 09:22:30 2019
Main thread ended...
print_number ending...... Wed Mar 20 09:22:35 2019
print_letter ending...... Wed Mar 20 09:22:40 2019 ***Repl Closed***

可以看到主线程、t1、t2同时开始执行,主线程仅打印了“Main thread ended...”,就执行完毕并退出;而程序等待t1和t2执行完毕后才退出。

2、使用join()方法:主线程主线程任务结束之后,进入阻塞状态,一直等待调用join方法的子线程执行结束之后,主线程才会终止。下面的例子是让t1调用join()方法。

import threading
import time def print_number(num): print("-----> %d" % num, time.ctime())
time.sleep(5)
print("print_number ending......", time.ctime()) def print_letter(letter): print("-----> %s" % letter, time.ctime())
time.sleep(10)
print("print_letter ending......", time.ctime()) t1 = threading.Thread(target=print_number,args=(10,))
t2 = threading.Thread(target=print_letter,args=('hello',)) if __name__ == '__main__':
t1.start()
t2.start() t1.join() print("Main thread ended...")

程序运行结果如下:

-----> 10 Wed Mar 20 09:20:59 2019
-----> hello Wed Mar 20 09:20:59 2019
print_number ending...... Wed Mar 20 09:21:04 2019
Main thread ended...
print_letter ending...... Wed Mar 20 09:21:09 2019 ***Repl Closed***

可以看到与无join方法时的输出顺序明显不同。t1、t2同时启动。而t1的时间短,因此在5秒钟之后该线程执行完毕。由于t1.join(),主线程在执行时,在调用t1.join()方法的地方被阻塞了,在此处一直等待t1执行结束,主线程才会执行最后一行代码。

线程中的join方法的更多相关文章

  1. 线程中的join方法,与synchronized和wait()和notify()的关系

    什么时候要用join()方法? 1,join方法是Thread类中的方法,主线程执行完start()方法,线程就进入就绪状态,虚拟机最终会执行run方法进入运行状态.此时.主线程跳出start方法往下 ...

  2. 模拟做饭系统(java+线程中的join方法)

    (一)项目框架分析 妈妈要去做饭,发现没有酱油,让儿子去买酱油,然后回来做饭. 根据面向对象的思想,有两个对象,妈妈和儿子 主要有两个方法: (一)没有线程控制(即儿子没有买酱油回来妈妈就做好饭了)+ ...

  3. Java多线程中的join()方法

    一.join()方法介绍 join() 定义在Thread.java中.join()方法把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的join( ...

  4. Java并发编程--多线程中的join方法详解

    Java Thread中, join()方法主要是让调用该方法的thread在完成run方法里面的部分后, 再执行join()方法后面的代码 例如:定义一个People类,run方法是输出姓名年龄. ...

  5. Thread类中的join方法

    package charpter06; //类实现接口public class Processor implements Runnable { // 重写接口方法 @Override public v ...

  6. 线程中的join()

    http://blog.itpub.net/31555134/viewspace-2221319/ 一直对join()方法不是很理解,在A线程中, B线程调用了join()方法,然后在内部实际是wai ...

  7. 3-等待线程终止的join方法

    等待线程终止的join方法 在项目实践中经常会遇到一个场景,就是需要等待某几件事完成之后才能继续往下执行,比如线程加载资源等等. package com.heiye.learn1; public cl ...

  8. jQuery中的join方法

    和JS 中的JOIN 方法一样,将一数组按照JOIN的参数连接起来.比如: var arr = [ "a", "b", "c", " ...

  9. java线程学习之join方法

    join()方法表示一个线程要加入另一个线程,直到被加入的线程执行完毕. 这个概念不好理解的话看面这个例子 public class TestJoin { public static void mai ...

随机推荐

  1. SQL Server中与IO相关的等待类型:IO_COMPLETION和PAGEIOLATCH_*

    一个大的SQL语句操作,执行计划中包含了一个merge join操作,观察到SQL长时间处于IO_COMPLETION等待状态,如果是读取相关的表的数据,服务器应该全力为其服务,但是服务器的物理IO又 ...

  2. .Net23种设计模式

    C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些 ...

  3. 第二次oo博客作业--多线程电梯

    这次的系列作业是写一个电梯调度,主要目的是让我们熟悉多线程. 第一次作业是一个傻瓜电梯的调度问题,要求也很简单,即每次接一个人就行了.我只用了两个线程,一个是输入线程,一个是电梯线程,输入线程负责从标 ...

  4. heat-engine组件

    1.heat-engine启动一个rpc server端,EngineService在初始化时加载heat.clients插件和初始化env, env中包括各种资源关键字对应的映射类和constrai ...

  5. java第一天 数据类型、变量的命名、类型的转换

    数据类型 /* 数据类型:Java是一种强类型语言,针对每一种数据都给出了明确的数据类型 数据类型分类: A:基本数据类型 B:引用数据类型(类,接口,数组) 基本数据类型:4类8种 A:整数 字节 ...

  6. step_by_step_xUnit_Net_ABP

    这段日子的开发一直使用Asp.net Boilerplate ,称之为项目模板自然就有开发中常用的功能,测试框架也在其中,土牛的ABP源代码都有通过测试,很遗憾的是我之前没有写过测试,不会就要去找资料 ...

  7. Tensorflow学习笔记2019.01.22

    tensorflow学习笔记2 edit by Strangewx 2019.01.04 4.1 机器学习基础 4.1.1 一般结构: 初始化模型参数:通常随机赋值,简单模型赋值0 训练数据:一般打乱 ...

  8. ucore-lab1-练习6report

    练习6--完善中断初始化和处理 1.  中断向量表中一个表项占多少个字节?其中哪几位代表中断处理代码的入口? 答:系统将所有的中断事件统一进行编号(0-255),这个编号称为中断向量.中断向量表的一个 ...

  9. 利用百度编辑器和IIS限制文件上传的大小

    1.百度编辑器的大小限制 针对不同的文件类型限制大小 例如图片是imageMaxSize ,依次类推 /* 前后端通信相关的配置,注释只允许使用多行方式 */ {     /* 上传图片配置项 */ ...

  10. gym 101982 B题 Coprime Integers

    题目链接:https://codeforces.com/gym/101982/attachments 贴一张图吧: 题目意思就是给出四个数字,a,b,c,d,分别代表两个区间[a,b],[c,d],从 ...