Chciałbym odczytywać dane wyjściowe i strumienie błędów procesu i połączyć je w jeden strumień tekstu. Mój program jest w Groovy i brzmi tak:Co to jest wątek ByteArrayOutputStream bezpieczny dla wątków?
def mergeStream = new ByteArrayOutputStream()
process.waitForProcessOutput(mergeStream, mergeStream)
Problemem jest to, że nie jest ByteArrayOutputStream wątku bezpieczne i waitForProcessOutput() generuje dwa wątki, które dołącza do mergeStream. Czy istnieje wariant bezpieczny dla wątków, którego mogę użyć? Jak inaczej radzisz kontrolować dostęp do mergeStream? Wygląda na to, że w praktyce takie postacie czasami są odrzucane.
Czy brałeś pod uwagę redirectErrorStream ProcessBuildera? – artbristol
Tak, * jest * wątkowo bezpieczny, a raczej wszystkie jego metody są zsynchronizowane, a 'ProcessBuilder.redirectErrorStream()' sprawia, że całe pytanie jest zbędne. To nie jest prawdziwe pytanie. – EJP
@EJP - to tylko "nie jest prawdziwe pytanie", jeśli znasz odpowiedź - w przeciwnym razie jest to WIELKIE pytanie! Javadoc nie mówi nic o tym, że jest zsynchronizowany - AFAICT, musisz wykopać źródło, żeby to odkryć, i nigdy bym się nie przejmował (zakładając, że nie było to nici bezpieczne, ponieważ doktor nic nie powiedział), gdybyś nie skomentował. –