许多人在单线程中调用静态方法

Mar*_*cki 4 java static synchronisation

请看这个类,静态方法调用和输出.

public class OneThreadManyStaticCalls {

public static final Calculator calculator = new Calculator();
    public static void main(String[] args) {
        dummy(0, 1, 1);
        dummy(0, 2, 2);
        dummy(0, 3, 5);
        dummy(0, 4, 44);
        dummy(0, 5, 5);
    }

    public static void dummy(int a, int b, int expected) {

        System.out.print(System.currentTimeMillis() + "\t");
        if (calculator.add(a, b) == expected) {
            System.out.println("OK");
        } else {
            System.err.println("NOK");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了不同的(来自System.out.print的命令)运行该程序的输出.例:

   NOK
   NOK
   1342527389506    OK
   1342527389506    OK
   1342527389506    1342527389506   1342527389506   OK
Run Code Online (Sandbox Code Playgroud)

你们有没有人(详细说明)为什么解释我?提前致谢.sznury

Jac*_*hle 12

System.err和System.out是在控制台窗口中交错的两个不同的流 - 它们不一定是同步的.尝试使用System.*.flush()(没关系,这似乎不起作用)强制处理输出,或将所有输出打印到同一个流.

public static void dummy(int a, int b, int expected) {
    System.out.print(System.currentTimeMillis() + "\t");
    if ((a + b) == expected) { // I don't have your Calculator :<
        System.out.println("OK");
    } else {
        System.out.println("NOK");
    }
}
Run Code Online (Sandbox Code Playgroud)

给出了这个结果

1342528255764   OK
1342528255764   OK
1342528255764   NOK
1342528255764   NOK
1342528255764   OK
Run Code Online (Sandbox Code Playgroud)