python之多线程---join的作用
我们直接看代码:
代码如下:
1 # encoding: utf-8 2 3 import threading 4 import time 5 ''' 6 进程: 启动的应用程序 7 线程:程序中实际做事情的单元 8 9 主线程和子线程 10 进程启动之后会自动启动一个主线程,主线程启动若干子线程,实现多线程 11 (1)使用join(),使主线程在任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程再终止 12 (2)join一般加在所有线程启动之后 13 ''' 14 15 16 class MyThread(threading.Thread): 17 def run(self): # run方法前面的圈圈可以看出是复写了线程原本的run方法 18 print(1) 19 time.sleep(0.1) 20 print(2) 21 time.sleep(0.1) 22 print(3) 23 time.sleep(0.1) 24 25 print('主线程开始啦!') 26 th1 = MyThread() 27 th2 = MyThread() 28 th3 = MyThread() 29 30 # th1.start() 31 # th2.start() 32 # th3.start() 33 # 34 # th1.join() 35 # th2.join() 36 # th3.join() 37 38 # 如下情况,就是线程2需要等线程1执行完毕之后再执行,线程3需要等线程2执行完毕之后再执行,这样的话,三个线程就不是并行执行的了 39 th1.start() 40 th1.join() 41 th2.start() 42 th2.join() 43 th3.start() 44 th3.join() 45 46 print("主线程结束啦!")
如果,我们改成下面的情况,将join加在所有线程启动之后,我们再来看结果。
由上可以看出,将join()放在所有线程启动之后的话,线程是并行执行的!
代码如下:
1 # encoding: utf-8 2 3 import threading 4 import time 5 ''' 6 进程: 启动的应用程序 7 线程:程序中实际做事情的单元 8 9 主线程和子线程 10 进程启动之后会自动启动一个主线程,主线程启动若干子线程,实现多线程 11 (1)使用join(),使主线程在任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程再终止 12 (2)join一般加在所有线程启动之后 13 ''' 14 15 16 class MyThread(threading.Thread): 17 def run(self): # run方法前面的圈圈可以看出是复写了线程原本的run方法 18 print(1) 19 time.sleep(0.1) 20 print(2) 21 time.sleep(0.1) 22 print(3) 23 time.sleep(0.1) 24 25 print('主线程开始啦!') 26 th1 = MyThread() 27 th2 = MyThread() 28 th3 = MyThread() 29 30 th1.start() 31 th2.start() 32 th3.start() 33 34 th1.join() 35 th2.join() 36 th3.join() 37 38 # 如下情况,就是线程2需要等线程1执行完毕之后再执行,线程3需要等线程2执行完毕之后再执行,这样的话,三个线程就不是并行执行的了 39 # th1.start() 40 # th1.join() 41 # th2.start() 42 # th2.join() 43 # th3.start() 44 # th3.join() 45 46 print("主线程结束啦!")