У меня есть многопоточное 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.
}
Есть ли для меня простой способ распечатать несколько потоков на консоль за один раз без буферов, содержащих старую информацию?
Спасибо
РЕДАКТИРОВАТЬ: обновил код в основном потоке, чтобы он лучше отражал то, что делает моя программа.