gpt4 book ai didi

java - Java 中使用 System.out.println 的多线程

转载 作者:行者123 更新时间:2023-12-02 13:00:53 26 4
gpt4 key购买 nike

我有一个多线程 Java 应用程序,它会将收到的消息的相关信息输出到控制台以进行调试。每次应用程序收到消息时,都会对该消息调用 System.out.println(String)

我遇到的问题是,如果应用程序被消息淹没,System.out.println() 会打印错误信息(如旧的缓冲区信息)。这让我想知道是否存在线程问题,即多个线程同时调用 println 函数,并且没有正确刷新缓冲区。

在我的主程序(线程)中,我有一些效果:

while(iterator.hasNext())
{
SelectionKey key = iterator.next();

channel.receive(buffer); // The buffer is a ByteBuffer.
buffer.flip();

new Thread(new ThreadToPrintTheMessage(buffer)).start();

buffer.clear();

iterator.remove();
}

在我的线程中,我有一些效果:

@Override
public void run()
{
System.out.println(message);
System.out.flush(); // I have better results with this. But, it doesn't
// fully resolve the issue.
}

有没有一种简单的方法可以让多个线程同时打印到控制台,而缓冲区不包含旧信息?

谢谢

编辑:更新了主线程中的代码,以更能代表我的程序正在执行的操作。

最佳答案

synchronized (System.out) {
System.out.println(message);
System.out.flush();
}

关于java - Java 中使用 System.out.println 的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9467759/

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