编写一个有 2 个线程交替打印的程序

2023-11-22

我最近在接受采访时被问到这个问题。

编写一个具有两个线程(A 和 B)的程序,其中 A 打印 1 ,B 打印 2 ,依此类推,直到达到 50。

我们该如何去做呢?


分配的本质是演示一个线程如何向另一个线程发出信号。最常见的方法是使用阻塞队列,但这里信号不携带任何信息,因此信号量就足够了。

创建使用 2 个信号量进行参数化的线程类:输入和输出:

class ThreadPrinter implements Runnable {
    int counter;
    Semaphore ins, outs;

    ThreadPrinter(int counter, Semaphore ins, Semaphore outs) {
        this.counter = counter;
        this.ins = ins;
        this.outs = outs;
    }

    @Override
    public void run() {
        for (int i = 0; i < 25; i++) {
            ins.aquire(); // wait for permission to run
            System.out.println("" + counter);
            outs.release();  // allow another thread to run
            counter += 2;
        }
    }

创建2个Semaphores 并将它们传递给 2 个线程:

Semaphore a = new Semaphore(1);  // first thread is allowed to run immediately
Semaphore b = new Semaphore(0); // second thread has to wait
ThreadPrinter tp1 = new ThreadPrinter(1, a, b);
ThreadPrinter tp2 = new ThreadPrinter(2, b, a); 

注意信号量a and b以不同的顺序传递。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写一个有 2 个线程交替打印的程序 的相关文章

  • Java:while循环冻结程序

    我正在制作一个游戏 我需要每 3 秒更新一次 JProgressBar 为此 我使用 while 循环 问题是我的程序由于 while 循环而冻结 我在其他问题中读到它 他们没有帮助我解决这个问题 我不知道如何解决 这是我的代码 publi
  • 有哪些学习线程编程的好资源? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 随着多核CPU在桌面上的兴起 多线程技能将成为程序员的宝贵资产 您能为想要学习线程编程的程序员推荐一些好的资源 书籍 教程 网站等 吗 看
  • C++ 11 相当于 java.util.ConcurrentHashMap

    我发现自己不断地编写互斥体代码 以便同步对 std unordered map 和其他容器的读 写访问 以便我可以像使用 java util concurrent 容器一样使用它们 我正要开始编写一个包装器来封装互斥体 但我宁愿使用经过良好
  • JTree ConvertValueToText 返回在更改时被截断

    我有一个自定义树实现convertValueToText 此实现取决于某些全局状态 如果返回的字符串比先前返回的字符串更长 实际上我认为更宽 因为以像素为单位触发它 则文本将被截断并用 填充 当重绘是由 取消 选择元素或某个元素引起时 情况
  • 为什么当达到 InitiatingHeapOccupancyPercent 时 G1 不开始标记周期?

    根据文档 http www oracle com technetwork articles java g1gc 1984535 html XX InitiatingHeapOccupancyPercent 设置触发标记周期的Java堆占用阈
  • Eclipse Oxygen - 该项目未构建,因为其构建路径不完整

    我刚刚安装了 Eclipse Oxygen 并尝试在工作台中打开现有项目 但收到此错误 该项目未构建 因为其构建路径不完整 不能 找到 java lang Object 的类文件 修复构建路径然后尝试 建设这个项目 我尝试右键单击该项目 转
  • 在 libgdx 中渲染 box2d

    我有一个使用 FitViewport 的大小为 800x480 的游戏世界 并且最初使用像素渲染 box2d 实体 固定装置 因此所有物理效果都显得浮动且缓慢 查看文档后 我意识到 box2d 使用度量单位 因此我将 box2d 位置和大小
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • VBA 中的多线程

    这里有人知道如何让VBA运行多线程吗 我正在使用 Excel 无法用 VBA 本地完成 VBA 构建在单线程单元中 获得多个线程的唯一方法是使用 VBA 之外的其他具有 COM 接口的东西构建 DLL 并从 VBA 调用它 信息 OLE 线
  • 我可以使用 Selenium Webdriver 测试元素的顺序吗?

    有一个表单 其中有 3 个字段 具有 3 个不同的 ID fieldset div div fieldset
  • 如何在java中从包含.0的浮点数中删除小数部分

    我只想删除包含的浮点数的小数部分 0 所有其他数字都是可以接受的 例如 I P 1 0 2 2 88 0 3 56666 4 1 45 00 99 560 O P 1 2 2 88 3 567 4 1 45 99 560 有什么方法可以做到
  • 使用 Haskell 将函数注入到 Java .class 文件中

    我使用 Haskell 编写了一个 Java 字节码解析器 它工作得很好 然而下一步让我完全难住了 我的 Haskell 程序需要修改 class 文件 以便在执行时 Java 程序打印 输入 此处的方法名称 在执行方法之前 并且 退出 此
  • 将 Maven 控制台与 m2eclipse 一起使用

    Maven 新手在这里 有没有办法在 Eclipse 中打开控制台并在 M2Eclipse 插件上执行 Maven 命令 这是一个非常好的插件 但我环顾四周 没有找到我想要的一些功能 谢谢 如果你想运行特定的maven插件 你可以这样做 g
  • Log4j 2.0 中发现 ClassNotFoundException

    我已经设置了 log4j12 api beta2 jar 的构建路径 但它给出了 以下错误请帮我解决这个问题我的代码如下 java 文件 package com sst log4j class Product private int pro
  • Java DNSLookup MX 记录列表。类似于 MXToolBox

    我正在构建一个程序来列出域的所有 MX 记录 起初似乎工作正常 但与在线工具进行比较后http mxtoolbox com http mxtoolbox com 有些域程序无法获取 MX 记录 而 MXToolbox 可以 我不确定原因是什
  • Eclipse Juno 指标插件

    Eclipse JUNO 版本有哪些 Eclipse 指标插件 我尝试了一些通用指标插件 但没有一个能够在 Eclipse 的 JUNO 版本中正常运行 差点忘了 我们正在使用 Java 作为编程语言 我想要诸如圈复杂度 代码行数 方法长度
  • gwt 文本框添加更改处理程序

    我有一个从设计师那里收到的文本框 但是我在 GWT 中编写了操作 问题是文本框为空 但是当通过按下按钮用值填充文本框时 将显示警报框 通知值已更改 但没有成功 帮助我 TextBox zip1 null function onModuleL
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • 按钮悬停和按下效果 CSS Javafx

    我是 CSS 新手 为按钮定义了以下 CSS 样式 其中id并且应用了自定义样式 但不应用悬停和按下效果 bevel grey fx background color linear gradient f2f2f2 d6d6d6 linear
  • java中什么是静态接口?

    我正在阅读Map Entry界面 当我注意到它是一个static界面 我不太明白什么是静态接口 它与常规接口有什么不同 public static interface Map Entry

随机推荐

  • Android 添加本机支持 - 未解析的 jni.h、android/log.h 等

    今天之前我使用 Eclipse 3 8红杉插件适用于 Android NDK 项目 但今天我决定将 Eclipse 更新为带有 SDK 和 NDK 的 Juno 版本 我很高兴然后我看到Android 原生工具在 ADT 安装中 它将执行与
  • 如何将自定义 git hook 添加到 GitHub Enterprise 存储库?

    我已经启动了 GitHub Enterprise 11 10 272 的实例并创建了一个存储库 我已经用 Ruby 编写了一个预接收钩子 我想将其与该存储库一起使用 GitHub Enterprise 与常规 GitHub 一样 允许配置服
  • NODE_ENV === '生产'之外的精简代码。这意味着 Redux 的开发构建速度会变慢

    所以这是完整的错误 您当前正在使用 NODE ENV 生产 之外的精简代码 这意味着您正在运行较慢的 Redux 开发版本 我正在使用第三方图表库 CanvasJS 它需要访问全局范围 当我将它导入到我的任何模块中时 在浏览器中 可能是th
  • 为什么这里在数组定义中使用 splat ?

    def initialize apps catch 404 apps has app apps each app add app catch catch each status catch status true end 在这个方法中从机架
  • Eclipse 上的 PyDev Jython 交互式控制台创建失败

    为什么在 Eclipse 中调用我的 Jython 交互式控制台时可能无法创建 按照 Jython 手册中的 在 IDE 中使用 Jython 说明进行操作 http www jython org jythonbook en 1 0 Jyt
  • 有没有正确的方法来处理重叠的 NSView 兄弟姐妹?

    我正在开发一个 Cocoa 应用程序 并且遇到了一种情况 我希望两个 NSView 对象重叠 我有一个父 NSView 其中包含两个子视图 NSView A 和 NSView B 每个子视图都可以有自己的多个子视图 有没有适当的方法来处理这
  • jQuery SlideDown 不流畅

    我有这个小的 jQuery SlideDown 效果http jsfiddle net Gg4eP 2 但动画不流畅 我做错了什么 谢谢你的时间 您只需为每个可扩展 div 添加宽度即可 http jsfiddle net BpMam 解释
  • 对象检测 API 错误:“ImportError:无法导入名称anchor_generator_pb2”

    我正在尝试获取 Tensorflow 的新功能物体检测API在职的 我已经按照安装说明 但是当运行命令时 python object detection builders model builder test py 我收到以下错误 from
  • swfupload 不再在 IE 下工作

    http demo swfupload org v250beta2 simpledemo index php似乎不再在 IE 中工作了 有解决办法吗 我得到一个红十字 并且 按钮 不可点击 我运行的是 IE 8 我可以在 Windows 7
  • 格式“%d”需要“int”类型的参数,但参数 2 的类型为“int *”

    每次我在 hackerrank 上提交程序时都会出现以下错误 solution c In function main solution c 22 14 warning format d expects argument of type in
  • 箭头键在输入和文本区域中不起作用

    我的网络应用程序中有一个简单的文本区域和输入 由于某种原因 我无法使用箭头键返回输入的文本 输入光标不会向后移动 不过 我可以使用 ctrl a 或者用鼠标单击我要编辑的位置 这很令人困惑 我没有在代码中的任何关键事件中使用 e preve
  • Bash here 文档没有产生任何输出,知道为什么吗?

    在我的带有 Lubuntu 13 04 的 Acer 725 上 这个小脚本 bin bash echo echo lt
  • Django 过滤器与获取模型

    我是 Django 的新手 想了解过滤器与 get 之间的区别 Get Entry objects get id exact 14 Filter Entry objects filter id exact 14 上述声明有什么区别 提前致谢
  • Haskell - for 循环

    如果我想表达类似的东西 只是一个简单的例子 int a 0 for int x 0 x lt n x 1 a 1 a 我应该在哈斯克尔做什么 因为它没有变量概念 可能是错的 参见 Haskell 有变量吗 有几种选择 首先 您可以用朴素递归
  • 套接字异常:“端点映射器没有更多可用端点”

    我正在使用winsock 和C 来设置服务器应用程序 我遇到的问题是调用listen导致第一次机会异常 我想通常这些可以被忽略 但我发现其他人也有同样的问题 它导致应用程序偶尔挂起 任何帮助将不胜感激 第一个机会例外是 0x 1234567
  • 实现哈希表

    我正在尝试创建一个有效的查找表C 我有一个整数作为键和一个可变长度char 作为值 我看过uthash 但这需要固定长度char 价值 如果我把这个数字设得很大 那么我就使用了太多的内存 struct my struct int key c
  • ASP.Net MVC 的计划控件 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 是否有适用于 ASP Net MVC 的任何商业或其他
  • MAMP Config 帮助,显示 PHP 错误

    我正在 Snow Leopard 上运行最新版本的 MAMP 我的 php ini 文件已配置为显示错误 显示错误 打开 phpinfo 页面显示错误报告状态 为打开状态 我已经多次重新启动我的网络服务器 我用Google搜索过 没有发现类
  • delete[] 如何“知道”操作数数组的大小?

    Foo set new Foo 100 delete set 您没有将数组的边界传递给delete 但这些信息存储在哪里 是否标准化 当您在堆上分配内存时 分配器将跟踪您分配了多少内存 它通常存储在您分配的内存之前的 头 段中 这样 当需要
  • 编写一个有 2 个线程交替打印的程序

    我最近在接受采访时被问到这个问题 编写一个具有两个线程 A 和 B 的程序 其中 A 打印 1 B 打印 2 依此类推 直到达到 50 我们该如何去做呢 分配的本质是演示一个线程如何向另一个线程发出信号 最常见的方法是使用阻塞队列 但这里信