gpt4 book ai didi

java - join 执行不完整

转载 作者:行者123 更新时间:2023-11-30 08:20:49 24 4
gpt4 key购买 nike

此代码中存在一些问题,无法执行。但是当我取消对 finally block 的注释时,它只是打印“完整”而不打印“holas”,知道吗?

import java.util.ArrayList;
import java.util.List;


public class MyThread {

/**
* @param args
*/
public static boolean interruptTask=false;

public static class D extends Thread{
public void run(){
while(!interruptTask){
System.out.print("Hello");
}
}
}


public static void main(String[] args) {
// TODO Auto-generated method stub
Thread task = new D();
task.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
interruptTask=true;
try {
task.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}/*finally{
System.out.println("holas");
}*/
System.out.println("complete");
}

}

最佳答案

您的代码没有任何问题,这是 Eclipse 中的错误。

当我在 Eclipse 中运行代码时,我得到了 OP 描述的行为。当我从命令行运行生成的类文件时,它按预期工作。我怀疑 Eclipse 正在缓冲输出并“忘记”将其写出到控制台窗口。事实上 println() 工作而 print() 不支持这一点,但我希望最终的 println() 会导致 Eclipse 看到缓冲区。

我还运行了一个测试,将超时从 5000 减少到 10(毫秒),在这种情况下,Eclipse 中的输出是正确的。

我怀疑 Eclipse 中存储控制台输出的内部缓冲区已满。我的猜测是 Eclipse 正在寻找 \n 以刷新到控制台窗口。它永远不会在 OP 的原始代码中看到这一点,当缓冲区填满时,Eclipse 只会丢弃额外的输出。由于没有 \n 被写入控制台缓冲区,因此它永远不会显示。

我将在 Eclipse Bugzilla 上提交错误。这是一个非常好的测试用例。

编辑:这是一个更好的测试用例:

public class EclipseBug
{
private static int count = 781;
public static void main(String[] args)
{
for (int i=0; i<count; i++)
System.out.print("hello ");
System.out.println();
}
}

使用 count = 780 就可以了。 count = 781 没有输出产生。

提交的 Eclipse 错误:https://bugs.eclipse.org/bugs/show_bug.cgi?id=443433

关于java - join 执行不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25692601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com