这道题要注意的是两个线程唤醒和等待的顺序,应为第一个线程会比第二个线程更早结束,所以如果第一个线程已经结束,而第二个线程还在等待被唤醒,那第二个线程会一直等待下去,因此第一个线程要先等待后唤醒,这样他会先唤醒第二个线程再结束

  • 语无伦次,直接看代码吧
from threading import Condition, Thread
import timedef printFoo():print('foo', end='')time.sleep(0.5)def printBar():print('bar', end='')time.sleep(0.5)class FooBar:def __init__(self, n):self.n = nself._lock = Condition()def foo(self, printFoo) -> None:self._lock.acquire()for i in range(self.n):printFoo()# 这里要先等待self._lock.wait()self._lock.notify_all()self._lock.release()def bar(self, printBar) -> None:self._lock.acquire()for i in range(self.n):printBar()# 这里要先唤醒其他线程,self._lock.notify_all()self._lock.wait()self._lock.release()if __name__ == '__main__':n = 10foobar = FooBar(n)t1 = Thread(target=foobar.foo, args=(printFoo,))t2 = Thread(target=foobar.bar, args=(printBar,))# t2.start()t1.start()t2.start()

执行用时 :132 ms, 在所有 Python3 提交中击败了85.39%的用户
内存消耗 :16.1 MB, 在所有 Python3 提交中击败了100.00%的用户

力扣交替打印FooBar相关推荐

  1. leet-code 两个线程交替打印FooBar

    文章目录 一.题目 二.原理解析 三.完整代码 四.代码优化 五.Java版实现 一.题目 交替打印FooBar 两个不同的线程将会共用一个 FooBar 实例.其中一个线程将会调用foo()方法,另 ...

  2. LeetCode 多线程 1115. 交替打印FooBar

    1115. 交替打印FooBar Ideas 交替锁的设计,两把锁,foo执行的时候把foo lock acquire,print完了只有把bar lock release,这样foo就得等着,然后b ...

  3. 1115. 交替打印FooBar

    1115. 交替打印FooBar 我们提供一个类: class FooBar {public void foo() {for (int i = 0; i < n; i++) {print(&qu ...

  4. Leetcode1115交替打印FooBar

    交替打印FooBar 1. 题目描述: 我们提供一个类: class FooBar {public void foo() {for (int i = 0; i < n; i++) {print( ...

  5. LeetCode 1115. 交替打印FooBar

    我们提供一个类: class FooBar {public void foo() {for (int i = 0; i < n; i++) {print("foo");}}p ...

  6. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java

    <LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...

  7. 《LeetCode力扣练习》剑指 Offer 06. 从尾到头打印链表 Java

    <LeetCode力扣练习>剑指 Offer 06. 从尾到头打印链表 Java 一.资源 题目: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入: ...

  8. 力扣693.交替位二进制数

    题目描述 给定一个正整数,检查它的二进制表示是否总是 0.1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同. 示例 1: 输入:n = 5 输出:true 解释:5 的二进制表示是:10 ...

  9. 剑指 Offer 06. 从尾到头打印链表-力扣

    题目要求 力扣题解 代码 #include <vector> #include <iostream> using namespace std; struct ListNode ...

最新文章

  1. jquery的页面加载完执行的函数
  2. pytorch 神经网络训练注意最后一批次输出的数据体量
  3. JavaScript权威指南 - 函数
  4. oracle 一次删除多张表
  5. linux网站目录在哪_果核建站教程【二】环境安装与搭建第一个网站
  6. 字节跳动招聘【三维视觉】算法实习生
  7. SpringBoot中LogBack日志输出配置记录
  8. Win socket编程--IOCP完成端口模型
  9. h5 a标签下载链接下载文件
  10. 低资源和跨语言NER任务的新进展:词级别数据增强技术
  11. Matlab编程风格指南--Richard Johnson(命名规则,文件与结构,基本语句,布局,注释与文档)
  12. 二级路由器设置为何要关闭DHCP服务
  13. 2021-2027全球及中国特种机器人行业研究及十四五规划分析报告
  14. 简析美颜sdk中的人脸识别算法
  15. 自己搭深度学习环境踩坑血泪史
  16. 网易2021算法笔试问题四:牛牛铺路
  17. 关于谷歌收购摩托罗拉移动的评论
  18. CATIA 汽车整车夹具数据3D模型 焊接夹具 钣金3D
  19. 【技术美术图形部分】AO理论及优化 AO贴图如何参与渲染
  20. 质量基础设施一站式服务平台建设,NQI线上系统开发方案

热门文章

  1. dubbo forbid service的解决办法
  2. Springboot 之 Hibernate自动建表(Mysql)
  3. Ubuntu下Navicat 配置
  4. uplift model学习笔记
  5. php 两变量值互换 方法
  6. 猫:君主般的眼神 监视领地。 狗
  7. 设置窗口的光标,设置ToolBar,设置状态栏
  8. OpenDDS用idl生成自定义数据类型时遇到的一个问题
  9. SyntaxError:identifier starts immediately after numeric literal
  10. 基于图像分割的立体匹配方法