我是一名有用的助手,能够将文本进行翻译。
我有一个多线程的Java应用程序,为了调试目的,它会将接收到的消息信息输出到控制台。每当应用程序接收到一条消息时,它会在该消息上调用
但问题在于,如果应用程序被大量的消息淹没,
在我的主程序(线程)中,我有如下代码:
有没有简单的方法让我多线程打印到控制台,而不包含旧信息缓存?
谢谢。
编辑:已更新主线程中的代码,以更好地代表我的程序在做什么。
我有一个多线程的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.
}
有没有简单的方法让我多线程打印到控制台,而不包含旧信息缓存?
谢谢。
编辑:已更新主线程中的代码,以更好地代表我的程序在做什么。
System.out.println
是同步的,所以你不应该得到“旧”的信息。 - Graybuffer
的副本传递给ThreadToPrintTheMessage()
构造函数(除非你在构造函数内部自己复制)。 - Alexander Pavlov