繁体   English   中英

Java 与 NetBeans 7.2.1 - 执行顺序问题

[英]Java with NetBeans 7.2.1 - Execution order issue

考虑 NetBeans Java 应用程序中的以下两个类。 主要类:

public class ExcecutionOrder {
    public static void main(String[] args) {

        Worker worker = new Worker();

        worker.init();
        worker.doProcessing();
        worker.stop();
    }
}

还有一个像这样的工人阶级:

public class Worker {

    public void init() {
        System.out.println("\n-------------------------------------------------");
        System.out.println("Worker initialized.");
        System.out.println("-------------------------------------------------\n");
    }

    public void doProcessing() {
        printNTimes(2000);
    }

    public void doProcess(int n) {
        printNTimes(n);
    }

    public void printNTimes(int n) {
        System.out.println();
        for (int i = 0; i < n; i++) {
            System.err.println("Output by Worker: " + i);
        }
        System.out.println();
    }

    public void stop() {

        System.out.println("\n-------------------------------------------------");
        System.out.println("Worker stopped.");
        System.out.println("-------------------------------------------------\n");
    }
}

奇怪的是,输出结果按以下顺序:

Output from Worker: 0
-------------------------------------------------
Output from Worker: 1
Worker initialized.
Output from Worker: 2
-------------------------------------------------
Output from Worker: 3
[...]

应该在哪里:

-------------------------------------------------
Worker initialized.
-------------------------------------------------
Output from Worker: 0
Output from Worker: 1
Output from Worker: 3
[...]

如果我将 netbeans 的处理器关联设置为仅使用一个 cpu 核心,那么至少初始部分没问题,而其他控制消息(Worker 已停止。)仍然是碎片化的。 受到输出消息的干扰。

使用 Eclipse 执行相同的操作会产生预期的执行顺序。

有谁知道这里发生了什么? - 非常感谢您提前提供任何建议!

PS:NetBeans 7.2.1 使用的是 jdk1.7.0_03,Eclipse 版本是 Mars.2 Release (4.5.2) - 甚至在不使用其他方法的情况下将代码从工作类转移到主类的主方法时也会出现问题根本不是主要方法。

您正在使用System.out为您的Worker initialized并为您Output by Worker...使用System.err Output by Worker...

System.outSystem.err是不同的输出流,它们在不同的时间被刷新,因此控制台上的输出是乱序的。

对所有输出行使用System.out.println() ,所有输出都将按预期顺序排列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM