Wrapping System.out в другом потоке вывода на самом деле не имеет значения. Он просто вызовет те же методы. Ваши ограничения создают миллионы мелких объектов и способность консоли получать, удерживать и отображать все.
Кроме того, простое проектирование простого теста.
public static void main(String[] args) {
System.out.println();
long start = 0L;
start = System.currentTimeMillis();
for(int i = 0; i <= 999999; i++)
System.out.println(i);
long printStreamTime = System.currentTimeMillis() - start;
PrintWriter writer = new PrintWriter(System.out);
System.gc();
try {
Thread.sleep(1000L);
} catch(InterruptedException ie) {}
start = System.currentTimeMillis();
for(int i = 0; i <= 999999; i++)
writer.println(i);
long printWriterTime = System.currentTimeMillis() - start;
System.out.println();
System.out.println("PrintStream time = " + (printStreamTime/1000.0));
System.out.println("PrintWriter time = " + (printWriterTime/1000.0));
}
Я получил ~ 49 секунд для обоих. Почти одинаково.
Если вы хотите скорость, напишите файл и откройте его.
ни, не не постить один миллионы строк для вывода. Также не беспокойтесь о том, как оптимизировать материал, который вы никогда не будете делать. –
Это зависит от буфера, например, от проблемы с производителем. –
@ user2310289 благодарит за предложение. Но у меня есть случай, когда мне нужно сделать именно это. – noooooooob