使用线程打印奇偶数

2023-12-26

使用线程打印奇偶数。创建一个线程类,两个线程实例。一个将打印奇数,另一个将打印偶数。

我做了以下编码。但到了死锁状态。有人可以解释一下这可能是什么原因吗?

public class NumberPrinter implements Runnable{
private String type;
private static boolean oddTurn=true;


public NumberPrinter(String type){
    this.type=type;
}
public void run() {
    int i=type.equals("odd")?1:2;
    while(i<10){
        if(type.equals("odd"))
            printOdd(i);
        if(type.equals("even"))
            printEven(i);
        i=i+2;
    }

}

private synchronized void printOdd(int i){
    while(!oddTurn){
        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    System.out.println(type + i);
    oddTurn=false;
    notifyAll();
}

private synchronized  void printEven(int i){
    while(oddTurn){
        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace(); 
        }
    }
    System.out.println(type + i);
    oddTurn=true;
    notifyAll();

}

public static void main(String[] s){
    Thread odd=new Thread(new NumberPrinter("odd"));
    Thread even=new Thread(new NumberPrinter("even"));
    odd.start();
    even.start();

}
}

Out Put:奇数1 偶数2


然后陷入僵局!!!!!!

感谢您的帮助。


您正在等待并通知不同的对象(monitors).

这个想法是你可以打电话obj.wait()等待某人做obj.notify(),当你做的时候objA.wait() and objB.notify().

改变你的printOdd类似的方法

private void printOdd(int i) {
    synchronized (lock) {                        // <-------
        while (!oddTurn) {
            try {
                lock.wait();                     // <-------
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(type + i);
        oddTurn = false;
        lock.notifyAll();                        // <-------
    }
}

and the printEven方法类似。

然后提供NumberPrinter with a lock object:

Object lock = new Object();
Thread odd = new Thread(new NumberPrinter("odd", lock));
Thread even = new Thread(new NumberPrinter("even", lock));

Output:

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

使用线程打印奇偶数 的相关文章

  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • 在推出自己的结构时提供辅助函数

    如果我正在开发一个 C 共享库并且我有自己的结构 为了使库使用者更容易对这些结构实例进行常见操作 我可以在结构本身内部提供指向此类函数的函数指针吗 这是一个好的做法吗 使用不同参数并行调用实用函数等多线程处理是否会出现问题 我知道它更接近
  • IntelliJ 错误:发生 JNI 错误,请检查您的安装并重试

    我正在尝试在 intellij 中运行一个项目 每次运行特定的类时 我都会收到以下错误消息 Error A JNI error has occurred please check your installation and try agai
  • 缓冲文件中的一组行并将其存储在 C 中的数组中

    这可能是一种非常低效的方法 但它确实有效 此代码读取一个文件 一次在全局数组中存储 8 行文本 如果可能的话 希望有更好的选择来执行此操作 并分派以进行进一步处理 这是代码 int count 0 global char array buf
  • Flutter 设置状态 onPressed on RaisingButton

    我正在构建一个测验应用程序 它会在用户提交他们选择的答案后显示正确答案的解释 布局上有两个按钮 下一个问题 和 提交答案 在初始状态下 下一个问题 按钮很微妙 因为它不可点击 只有 提交答案 按钮可点击 点击这里查看初始状态的布局 http
  • 最小起订量测试无效方法

    您好 我是起订量测试的新手 很难做一个简单的断言 我正在使用一个界面 public interface IAdd void add int a int b 最小起订量IAdd接口是 Mock
  • 如何在 Rust 中使用以 f64 作为键的 HashMap?

    我想用一个HashMap
  • Elixir - 将浮点数转换为字符串

    我试图弄清楚如何将浮点转换为字符串 二进制 但似乎并不像看起来那么容易 iex 1 gt to string 1200 00 1 2e3 iex 2 gt Float to string 1200 00 1 2e3 我们需要 1200 00
  • androidcamera2将TotalCaptureResult与Frame关联起来

    这是关于 Android 的 Camera2 API 的 由于捕获结果和输出帧是异步产生的 因此可以在实际帧之前获得捕获结果 有没有好的方法将生成的帧与相应的捕获结果相关联 假设您正在谈论发送到的帧ImageReader or Surfac
  • 通过在改造中透明地发送另一个请求来处理特定错误

    这是我正在尝试处理的案例 如果执行请求 并且响应指示身份验证令牌已过期 发送刷新令牌请求 如果刷新令牌请求成功 则重试原始请求 这对于调用 Activity Fragment 等应该是透明的 从调用者的角度来看 这是一个请求 一个响应 我之
  • Mac 上 C++ 中的分段错误 11

    当我尝试运行这个时 int N 10000000 short res N 我遇到分段错误 11 当我改变为 int N 1000000 short res N 效果很好 您已经超出了操作系统指定的堆栈空间 如果您需要更多内存 最简单的方法是
  • 无法使用 npm 重建依赖关系

    当我尝试将本地运行良好的 NodeJS 应用程序推送到 Heroku 时 以下是我在终端中得到的内容 dcaclab ubuntu RubymineProjects nodejs consumer git push heroku maste
  • 为什么不注入 IServiceProvider 而不是每个单独的依赖项?

    我想知道为什么不显式使用 IServiceProvider 来解决依赖项而不是单独注入每个依赖项 换句话说 为什么要使用这种方法 public class A private B b private C c private D d priv
  • 使用 CLI 或任何其他方式将 C++ 库静态链接到 C# 进程

    是否可以采用用 C 编写的静态库 并以某种方式将其集成到 NET 进程中 从而将 NET 进程与 lib 集成到一个 exe 文件中 我的意思是 我知道我可以从 C 进程中调用 C DLL 但用户仍然必须拥有 C DLL 但是否可以使用 l
  • 使复选框绑定到可为 null 的 bool 转换,从 null 到 true

    我有一个复选框及其IsChecked属性绑定到可为 null 的布尔值 当我的控件首次加载时 该值为空 并且该复选框显示为灰色 这就是我要的 当用户单击该复选框时 它会转为 false 未选中状态 然而 99 的情况下 用户会想要勾选该复选
  • Julia UndefVarError:未定义子类型

    不清楚为什么我得到ERROR LoadError UndefVarError subtypes not defined执行 jl 文件时 但从 REPL 执行时则不然 E g abstract type Asset end abstract
  • 使用 Eclipse 在远程计算机中运行 Spark/Cloudera 应用程序

    我在理解使用 Scala Spark shell 和 Hadoop 环境进行开发的逻辑架构时遇到了一些问题 为了更好地描述逻辑架构 我画了一个小架构 如图所示 我在我的个人电脑上安装了 Eclipse 我想以远程模式从我的电脑运行 scal
  • C++ Windows API - 如何检索字体缩放百分比

    我想检索 把文字变大 C Windows API 应用程序中的百分比 我知道如何检索缩放 DPI 系数 但我还想包括字体缩放百分比 请参阅附图 上值 而不是下值 最终 我想要制作保留用户字体和 DPI 缩放设置的应用程序 以便完全支持辅助功
  • Kivy 日期选择器小部件

    已解决 请参阅下面的已接受答案的应用程序和功能 kivy DatePicker 小部件的源代码 我一直在学习 Kivy 并决定制作一个日期选择器小部件作为学习练习 import kivy kivy require 1 4 0 from ki
  • 在android中将SQLite数据库与远程mysql数据同步

    android中如何同步SQLite数据库和远程MySQL数据 为了说清楚 我想知道sqlite数据和远程mysql之间的同步是如何工作的 即 当远程mySQL数据库更新时 SQLite数据也应该更新 而无需按下任何按钮或向下滚动 如何使用
  • 使用线程打印奇偶数

    使用线程打印奇偶数 创建一个线程类 两个线程实例 一个将打印奇数 另一个将打印偶数 我做了以下编码 但到了死锁状态 有人可以解释一下这可能是什么原因吗 public class NumberPrinter implements Runnab