线程启动的先后问题
来源:11-5 线程同步 - condition 使用以及源码分析

ImClever
2023-04-07
import threading
class XiaoAI(threading.Thread):
def __init__(self, lock):
super().__init__(name="小爱同学")
self.lock = lock
def run(self):
for msg in ["在", "我住长江尾", "处处闻啼鸟", "烟火人间轻声言"]:
# self.lock.acquire()
with self.lock:
self.lock.wait()
print("{}:{}".format(self.name, msg))
self.lock.notify()
class TianMao(threading.Thread):
def __init__(self, lock):
super().__init__(name="天猫精灵")
self.lock = lock
def run(self):
for msg in ["小爱同学", "君住长江头", "春眠不觉晓", "青衣白马徐凤年"]:
# self.lock.acquire()
with self.lock:
print("{}:{}".format(self.name, msg))
self.lock.notify()
self.lock.wait()
if __name__ == "__main__":
# lock = threading.Lock()
lock = threading.Condition()
xiaoai = XiaoAI(lock)
tianmao = TianMao(lock)
tianmao.start()
xiaoai.start()
上述代码里面,我将 线程tianmao 先start, 线程xiaoai 后start。导致输出的结果:
天猫精灵: 小爱同学
如果调换两个线程的执行顺序,那么就能完美实现对话内容。
那么我是不是可以得出一个结论:
先执行wait()的线程需要在主线程内,先start。
写回答
1回答
-
bobby
2023-04-07
注意这两个线程的代码是不一样的,调用函数顺序也不一样
022023-04-09
相似问题
关于线程并行问题
回答 2
当不设置setDaemon的时候的情况
回答 1