我们直接看代码:
代码如下:
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("主线程结束啦!")