当前位置: 首页 > 知识库问答 >
问题:

除非在while循环中插入简单的print语句,否则代码无法工作[重复]

章嘉致
2023-03-14

我有以下代码

public String ls() throws IOException, InterruptedException {
    String pwd = getPWD();
    String inodePath = "Upload/Files" + pwd + "inode";

    // Request the inode file first
    Peer.setFileReceivedCheck(false);
    Inode i = new Inode();
    i.requestInode(pwd + "inode");

    boolean fileCheck = Peer.getFileReceivedCheck();
    System.out.println(fileCheck);
    while (fileCheck == false) {
        System.out.println(); // DOES NOT WORK IF THIS LINE IS REMOVED!!
        fileCheck = Peer.getFileReceivedCheck();
    }
    System.out.println(fileCheck);

    return i.readFromInode(inodePath);
}

在上面的 java 方法中,fileCheck 变量跟踪从网络下载文件的时间,并在文件下载完成时变为 true;以便在文件下载完成时返回函数。

我面临的奇怪问题是,如果我删除上面的行(只有一个println的行);该方法卡在while循环中,即使文件已经下载,也不会返回!知道为什么会这样吗?

编辑:这不是在单独的线程中运行。另一个类(Peer.java)中的文件下载代码在单独的中运行。同样,fileCheck的getter也在线程之外。

共有2个答案

华善
2023-03-14

您是否尝试添加一个小超时(100ms),而不是println()

柳威
2023-03-14

请以$DEITY的名义,不要使用热投票。停下来。现在。你在浪费数十亿个周期,你会让整个系统的响应性降低,而你在等待网络上的东西。使用回调——我们在2014年,这不是火箭科学。

也就是说,用这个替换while循环的内容:

Object o = new Object();
synchronized(o) {
   fileCheck = Peer.getFileReceivedCheck();
}

发生的情况是,您的检查可能只是返回一个非易失性字段,编译器可以自由地优化它——除非您的代码达到同步点。

 类似资料:
  • 好的,所以我有一个监视线程,它检查ArrayList的大小,并在该大小大于某个数字后执行某些操作。我现在遇到的问题是大小值永远不会更新,除非我的循环中有打印语句。这里有一些代码来显示我到底要做什么。 上面的代码不起作用。它永远不会进入 if 语句。但是,这工作正常: EDIT: getSize()代码: 注意:我正在运行另一个线程,该线程正在更新并添加到我的 t 类中的列表中。 有帮助吗?当我试图

  • Python 中,while 循环和 if 条件分支语句类似,即在条件(表达式)为真的情况下,会执行相应的代码块。不同之处在于,只要条件为真,while 就会一直重复执行那段代码块。 while 语句的语法格式如下: while 条件表达式:     代码块 这里的代码块,指的是缩进格式相同的多行代码,不过在循环结构中,它又称为 循环体。 while 语句执行的具体流程为:首先判断条件表达式的值,

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 为什么此代码给出“无法访问的语句”错误? 这个问题似乎很简单,我在一本书中发现了这个问题。如果有人帮助我弄清楚为什么我出错了。 我认为,根据我的看法,输出应该 在dooutside内部* 。但是,它显示了 编译器错误:Unreachable Statement 。然后,我试图找出原因,它显示了 **编译错误:Unreachabl

  • 问题内容: 我想每次插入带有日期+ 1的行。这是一个简单的SQL循环。我正在使用SSIS,因此StartDate和Enddate是变量。 这是我的代码: 错误信息: 消息156,级别15,状态1,行11关键字’select’附近的语法错误。 问题答案: 无需在声明。 代替 和

  • 本文向大家介绍简单掌握C++编程中的while与do-while循环语句使用,包括了简单掌握C++编程中的while与do-while循环语句使用的使用技巧和注意事项,需要的朋友参考一下 While 语句 重复执行语句,直到表达式计算为零。 语法 备注 expression 的测试在每次执行循环前发生;因此 while 循环执行零次或更多次。 表达式必须是整型、指针类型或包含明确的整型或指针类型转

  • 我正在开发一个简单的python程序,其中包括创建一个圆圈“按钮”,然后让用户在圆圈内单击。如果他们没有点击圆圈,会出现一条消息,说明他们在圆圈外点击,应该再试一次。然而,在最后一部分,我得到了一个关于代码的无休止的循环,尽管使用了中断。是否有任何人可以帮助查看是否存在错误?谢谢