我有一个多线程 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.
}
有没有一种简单的方法可以让多个线程一次打印到控制台,而缓冲区不包含旧信息?
谢谢
编辑:更新了主线程中的代码,以更能代表我的程序正在做什么。