Многопоточность с использованием System.out.println в 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.
}

Есть ли для меня простой способ распечатать несколько потоков на консоль за один раз без буферов, содержащих старую информацию?

Спасибо

РЕДАКТИРОВАТЬ: обновил код в основном потоке, чтобы он лучше отражал то, что делает моя программа.

6
задан Phanto 27 February 2012 в 16:02
поделиться