"""
1、线程的start方法执行线程。
2、join方法阻塞主线程,需要等待对应的子线程结束后再继续执行主线程。
"""
import threading
import time
"""
1、定义函数foo1,打印循环是第几环个线程。
2、我们在函数foo1中增加不同的sleep时间来证明是多线程并发执行的(如果是并行会按照执行完成的先后顺序打印,
如果是串行会按照123的顺序打印)
3、创建空列表p_list,将三个子线程放入该列表,用于执行join
4、创建3个子线程执行foo函数传递循环次数i
5、执行子线程(start)
6、执行阻塞(join)
"""
def foo1(n):
m_list = [3, 2, 1]
time.sleep(m_list[n-1])
print('这是第{}个线程'.format(n))
if __name__ == '__main__':
t_list = []
for i in range(1, 4):
t = threading.Thread(target=foo1, args=(i,))
t.start()
t_list.append(t)
for j in t_list:
j.join()
"""疑问:为什么要先通过循环执行3个子线程,再通过循环阻塞
1、因为join会阻塞主线程,如果执行一个子线程就阻塞,就会导致三个线程不是并发执行的而是串行的。
2、看下面的例子,我们将start和join放在一个循环中,这样就会先执行一个线程的start和join,然后在循环执行下一个线程。
3、可以看到他们的输出结果,永远都是1,2,3。说明是串行的。
"""
def foo2(n):
m_list = [3, 2, 1]
time.sleep(m_list[n-1])
print('这是第{}个线程'.format(n))
if __name__ == '__main__':
for i in range(1, 4):
p = threading.Thread(target=foo2, args=(i,))
p.start()
p.join()
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。