java - 在单线程中多次调用静态方法

标签 java static synchronization

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

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");
        }
    }
}

我在运行这个程序时得到了不同的(来自 System.out.print 的命令)输出。示例:

   NOK
   NOK
   1342527389506    OK
   1342527389506    OK
   1342527389506    1342527389506   1342527389506   OK

你们中的任何人都可以向我解释(详细说明)原因吗? 提前致谢。 祖国

最佳答案

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");
    }
}

给出这个结果

1342528255764   OK
1342528255764   OK
1342528255764   NOK
1342528255764   NOK
1342528255764   OK

关于java - 在单线程中多次调用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11522417/

相关文章:

java - 最终成员是否需要同步?

java - 如何在一天中每 5 次启动时显示对话框?

java - 如何进行定制的偏好选择

java - 来自java的Rest服务调用 key 长度不是128/192/256位

java - 实现静态 "memory"映射

javascript - 如何让循环中的函数同步运行?

java - 从 Main() 类启动和停止 Wildfly 服务器

ios - 无法使用sharedStore传递带有内容的数组?

java - 类级和对象级锁同步

Git 有两个版本作为分支