Observé el mismo comportamiento (leyendo 0 bytes) cuando construyo una ventana de salida de consola giratoria e hice un hilo de lectura para stdout y stderr mediante el siguiente código:
this.pi = new PipedInputStream();
po = new PipedOutputStream((PipedInputStream)pi);
System.setOut(new PrintStream(po, true));
Cuando la aplicación de oscilación 'principal' sale, y mi la ventana de la consola todavía está abierta. Leí 0 de this.pi.read(). Los datos de lectura se colocaron en la ventana de la consola, dando como resultado una condición de carrera de alguna forma, simplemente ignorando el resultado y no actualizando la ventana de la consola resolvió el problema.
Acepto: > Este método bloquea hasta que haya datos de entrada disponibles, se haya detectado el final del archivo o se haya lanzado una excepción. > Si la longitud de b es cero, no se leen bytes y se devuelve 0; de lo contrario, hay un intento de leer al menos un byte. > Si no hay ningún byte disponible porque la secuencia se encuentra al final del archivo, se devuelve el valor -1; de lo contrario, al menos un byte se lee y almacena en b. Gracias! –