当前位置: 首页 > news >正文

Leetcode1115 交替打印 FooBar及其测试

题目描述

相关标签
相关企业
给你一个类:

class FooBar {
public void foo() {
for (int i = 0; i < n; i++) {
print(“foo”);
}
}

public void bar() {
for (int i = 0; i < n; i++) {
print(“bar”);
}
}
}
两个不同的线程将会共用一个 FooBar 实例:

线程 A 将会调用 foo() 方法,而
线程 B 将会调用 bar() 方法
请设计修改程序,以确保 “foobar” 被输出 n 次。

示例 1:

输入:n = 1
输出:“foobar”
解释:这里有两个线程被异步启动。其中一个调用 foo() 方法, 另一个调用 bar() 方法,“foobar” 将被输出一次。
示例 2:

输入:n = 2
输出:“foobarfoobar”
解释:“foobar” 将被输出两次。

提示:

1 <= n <= 1000

解题思路

可以使用同步信号量的奇偶来来实现交替打印

代码实现

class FooBar {private int n;private volatile int s = 0;public FooBar(int n) {this.n = n;}public void foo(Runnable printFoo) throws InterruptedException {for (int i = 0; i < n; i++) {while (s%2!=0) {}printFoo.run();s+=1;}}public void bar(Runnable printBar) throws InterruptedException {for (int i = 0; i < n; i++) {while (s%2==0) {}// printBar.run() outputs "bar". Do not change or remove this line.printBar.run();s+=1;}}
}

测试方法

   public static void main(String[] args) throws InterruptedException {FooBar foo = new FooBar(3);ExecutorService executorService = Executors.newFixedThreadPool(3);executorService.submit(() -> {try {foo.foo(() -> System.out.print("foo"));} catch (InterruptedException e) {e.printStackTrace();}});executorService.submit(()->{try {foo.bar(()->System.out.print("bar"));}catch (InterruptedException e) {e.printStackTrace();}});//匿名内部类写法//lambda表达式写法executorService.shutdown();}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 这款新的 AI 语音助手击败了 OpenAI,成为 ChatGPT 最受期待的功能之一
  • Java 7新特性深度解析:提升效率与功能
  • Java中的数据可视化与图表库选择
  • 【TORCH】绘制权重分布直方图,权重torch.fmod对torch.normal生成的随机数进行取模运算
  • Codeforces Round 954 (Div. 3)
  • 软件设计之Java入门视频(12)
  • 玩转springboot之springboot使用外置tomcat进行运行
  • 缓存-缓存的使用与基本详解
  • Vue3从入门到精通(三)
  • Python实现Mybatis Plus
  • 常见反爬及应对
  • C# Socket
  • 多个tomcat同时使用 不设置CATALINA_HOME环境变量
  • Oracle 11.2.0.1升级到11.2.0.4并做rman备份异机恢复
  • 如何用Java写一个整理Java方法调用关系网络的程序
  • 【知识碎片】第三方登录弹窗效果
  • 2017-08-04 前端日报
  • 2017届校招提前批面试回顾
  • Angular数据绑定机制
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Flex布局到底解决了什么问题
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Lsb图片隐写
  • Objective-C 中关联引用的概念
  • Redis在Web项目中的应用与实践
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 读懂package.json -- 依赖管理
  • 入门级的git使用指北
  • 思维导图—你不知道的JavaScript中卷
  • 学习Vue.js的五个小例子
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • puppet连载22:define用法
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (1)(1.9) MSP (version 4.2)
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (4.10~4.16)
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (含笔试题)深度解析数据在内存中的存储
  • (黑马C++)L06 重载与继承
  • (蓝桥杯每日一题)love
  • (算法)硬币问题
  • (转)Sql Server 保留几位小数的两种做法
  • (转)程序员技术练级攻略
  • (转载)利用webkit抓取动态网页和链接
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .gitignore文件忽略的内容不生效问题解决
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Core 项目指定SDK版本
  • .NET MVC第三章、三种传值方式
  • .net refrector
  • .NET 简介:跨平台、开源、高性能的开发平台