编写一个有 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 个线程交替打印的程序 的相关文章

  • 如何以编程方式检查应用程序是否在调试模式下运行?

    我必须在应用程序中的某个位置确定我的应用程序是在调试模式还是实时模式下运行 是否有任何函数或代码可用于检查 在开 关两种情况下都会返回 true false 如果是这样 请帮助我 提前致谢 从问题中尚不清楚调试模式是否指的是 应用程序是否可
  • 使用SimpleMailMessage类发送邮件时如何使java字符串着色

    我正在使用 java 中的 SimpleMailMessage 类发送邮件 我将 spring 与 hibernate 结合使用 我想在发送邮件时将特定字符串设置为彩色 Code String emailBody Dear username
  • 面试问题 - 在排序数组 X 中搜索索引 i,使得 X[i] = i

    昨天面试时 我被问到了以下问题 考虑一个 Java 或 C 数组X它已排序并且其中没有两个元素是相同的 如何最好地找到索引i这样该索引处的元素也是i 那是X i i 作为澄清 她还给了我一个例子 Array X 3 1 0 3 5 7 in
  • 修复 java 内存泄漏的学习网站

    学习修复 java 内存泄漏的最佳地点是什么 我一直试图在网络上找到好的资源 但令我失望的是 我发现正在讨论玩具示例 我还能够对小型玩具转储进行故障排除 但现实世界的应用程序转储更具挑战性 并且提供的线索很少 我尝试过 Jhat JMap
  • Android 上的 setTimeOut() 相当于什么?

    我需要等效的代码setTimeOut call function milliseconds 对于安卓 setTimeOut call function milliseconds 您可能想查看定时任务 http developer andro
  • JSP重定向和传值

    我有一个 JSP 其中我重定向到另一个 jsp 例如 我在该jsp中没有任何其他数据 我想将值从该jsp index jsp 传递到重定向jsp login jsp 我将如何做到这一点 这里的 logonInput 是在struts con
  • lombok - 多个镜头中的 @Builder 模式

    I use Builder of 龙目岛项目 https github com rzwitserloot lombok 所以考虑我有这个例子 Builder public class Client private Getter Setter
  • 如何在Spring Security SAML示例中配置IDP元数据和SP元数据?

    我想处理 Spring Security SAML 为此 我开始探索Spring安全SAML http docs spring io spring security saml docs 1 0 x reference html chapte
  • 带有 spring-kafka 的 Kafka 死信队列 (DLQ)

    最好的实施方式是什么死信队列 DLQ Spring Boot 2 0 应用程序中的概念 使用 spring kafka 2 1 x 来处理无法处理的所有消息 KafkaListener某些bean发送到某些预定义的Kafka DLQ主题的方
  • 如何在 Android 中将 EditText 绘制到画布上?

    我想画画 EditText username new EditText context 到我画布上的特定位置 protected void onDraw Canvas canvas 是否可以在基础上画出x y在我的 Java 文件中协调而不
  • Java HttpURLConnection:内容长度计算

    我目前正在为 bitbucket issues RESTful API 开发一个库 我取得了很大的进步 现在我要解决这个部分更新问题 http confluence atlassian com display BBDEV Issues Is
  • 如何用java对jpg进行像素化?

    我正在尝试使用 Java 6 对 JPEG 进行像素化 但运气不佳 它需要使用 Java 而不是像 Photoshop 这样的图像处理程序 并且它需要看起来像老派 像这样 有谁能够帮助我 使用java awt image javadoc h
  • 从外部 clojar 导入/使用资源

    我想做的是将一个大文件 MIDI 声音字体 打包到一个独立的 Maven repo clojar 中 然后能够以编程方式将其拉下来并从单独的项目中使用它 事实证明 这个看似简单的任务比我想象的要复杂 理想的情况是 如果有一种方法可以直接访问
  • ObservableList 不更新 ArrayList

    对于学校作业 我们正在使用 JavaFX 中的 ObservableList 对象 对吗 我已经为此工作了一天多了 但无法弄清楚 老师只告诉我们 谷歌一下 所以这也没有帮助 基本上 我们正在开发一个基本的管理应用程序来跟踪人们及其家人 人们
  • 在java中设置Process对象的安全性

    有人可以告诉我如何限制通过进程对象访问系统属性吗 如果我通过进程对象运行以下代码 我可以抛出安全异常吗 System getProperty user home 请告诉我如何为流程对象配置证券 在ProcessBuilder类文档中 环境方
  • 使用 Java 进行 AES 加密并使用 Javascript 进行解密

    我正在制作一个需要基于 Java 的 AES 加密和基于 JavaScript 的解密的应用程序 我使用以下代码作为基本形式进行加密 public class AESencrp private static final String ALG
  • 从 Perl 线程生成 Expect

    我正在编写一个脚本 该脚本需要定期 每 5 分钟 生成一个 Expect 进程来完成一些工作 下面是我的代码 它生成一个 Expect 进程并执行一些工作 脚本的主要进程始终在做一些其他工作 例如它可能等待用户输入 因为我在一个线程中调用这
  • Google OR-Tools:无法运行 java 示例,java.lang.UnsatisfiedLinkError:java.library.path 中没有 jniortools

    我是java新手 我想尝试google or tools来解决车辆路由问题 只是尝试运行 java 示例here https developers google com optimization introduction run progr
  • 当我必须在 Netty4 编码器中调用 ByteBuf.retain() 时?

    我正在编写一个以 NUL 终止 JSON 消息的编码器 以便在消息碎片的情况下可以对其进行解码 我找到了这个样本 gt click https github com netty netty blob master codec src mai
  • gwt - 在 RPC 调用中使用 List

    我有一个 RPC 服务 方法如下 public List

随机推荐

  • 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 我们该如何去做呢 分配的本质是演示一个线程如何向另一个线程发出信号 最常见的方法是使用阻塞队列 但这里信