相关疑难解决方法(0)

System.out.println的多线程输出是否是交错的

如果多个线程在没有同步的情况下调用System.out.println(String),输出是否可以交错?或者每行写入原子?该API只字不提同步的,所以这似乎是可能的,或者是由缓冲和/或虚拟机存储器模型等防止交织输出?

编辑:

例如,如果每个线程包含:

System.out.println("ABC");
Run Code Online (Sandbox Code Playgroud)

输出保证是:

ABC
ABC
Run Code Online (Sandbox Code Playgroud)

或者它可能是:

AABC
BC
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronization printstream

67
推荐指数
3
解决办法
3万
查看次数

Java:System.out.println和System.err.println乱序

System.out.println()System.err.println()电话没有按照我制作的顺序打印到控制台.

public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        System.out.println("out");
        System.err.println("err");
    }
}
Run Code Online (Sandbox Code Playgroud)

这会产生:

out
out
out
out
out
err
err
err
err
err
Run Code Online (Sandbox Code Playgroud)

而不是交替outerr.为什么是这样?

java console system

52
推荐指数
3
解决办法
2万
查看次数

Java:同步标准输出和标准错误

我有一个奇怪的问题,如果我能解决它会很好.出于调试目的(以及其他一些事情),我正在标准输出上编写控制台Java应用程序的日志.有些东西是标准出来的,有些东西就像错误一样打印在标准错误上.问题是这两者并不完全同步,因此打印线的顺序并不总是正确的.我想这是因为打印了许多东西,并且发生一个输出的缓冲区已满,所以另一个输出在第一个输出刷新缓冲区之前打印.

我想写这个:

syso: aaa
syso: bbb
syso: ccc
syso: ddd
syso: eee
syserr: ---
Run Code Online (Sandbox Code Playgroud)

有时打印的是

aaa
bbb
ccc
---
ddd
eee
Run Code Online (Sandbox Code Playgroud)

有时两者之间没有新线,所以它看起来像

aaa
bbb
ccc---

ddd
eee
Run Code Online (Sandbox Code Playgroud)

每次我在输出上打印一些东西时,我用相同的输出刷新

System.out.flush();
Run Code Online (Sandbox Code Playgroud)

要么

System.err.flush();
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题呢?顺便说一句,一切都在Eclipse控制台中打印出来.

java eclipse

9
推荐指数
2
解决办法
5450
查看次数

将输出和错误消息打印到控制台

我正在尝试将输出和错误消息打印到控制台.但有时输出的顺序会改变,首先它会输出错误信息,然后打印出简单的信息,任何人都可以帮助我理解为什么会这样发生?输出序列大部分时间都在变化.打印输出没有一致性.我正在使用eclipse IDE,我得到的输出如下.

我试图打印以下代码,

System.out.println("simple message");  
System.err.println("error message");  
Run Code Online (Sandbox Code Playgroud)

预期的结果是这样的:

简单的消息

错误信息

但实际结果如下:

错误信息

简单的消息

java eclipse

6
推荐指数
1
解决办法
328
查看次数