Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.java > #13120

PipedOutputStream Write end dead

X-Received by 10.157.40.79 with SMTP id h15mr2875839otd.123.1498565114511; Tue, 27 Jun 2017 05:05:14 -0700 (PDT)
X-Received by 10.157.3.34 with SMTP id 31mr102182otv.14.1498565114483; Tue, 27 Jun 2017 05:05:14 -0700 (PDT)
Path csiph.com!feeder.erje.net!2.us.feeder.erje.net!weretis.net!feeder6.news.weretis.net!news.glorb.com!185no1657854itv.0!news-out.google.com!k7ni1281itk.0!nntp.google.com!185no1657851itv.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups de.comp.lang.java
Date Tue, 27 Jun 2017 05:05:14 -0700 (PDT)
Complaints-To groups-abuse@google.com
Injection-Info glegroupsg2000goo.googlegroups.com; posting-host=2003:ce:1bca:7d00:e0b7:b8c6:60e:dbfb; posting-account=uDcqFQoAAAD8catZ9YgcM3YaeqwF8Qnl
NNTP-Posting-Host 2003:ce:1bca:7d00:e0b7:b8c6:60e:dbfb
User-Agent G2/1.0
MIME-Version 1.0
Message-ID <c0a34dfd-eec4-4d3c-a90a-8a0e385a76d0@googlegroups.com> (permalink)
Subject PipedOutputStream Write end dead
From marcell.thissen@gmail.com
Injection-Date Tue, 27 Jun 2017 12:05:14 +0000
Content-Type text/plain; charset="UTF-8"
Content-Transfer-Encoding quoted-printable
Xref csiph.com de.comp.lang.java:13120

Show key headers only | View raw


Hallo auch,

ich arbeite schon etwas länger an einer Applikation, in der eine unbekannte Anzahl an Threads mit einem Consumerthread über PipedOutputStream kommunizieren.
Das klappt soweit auch sehr gut, bis auf einige Ausnahmen.
Ab und an (leider nicht reproduzierbar) bricht das System ab mit der Write end dead Exception.
Der Thematik rund um das Thema broken Pipes ist mir bewusst.
Allerdings hilft mir das, bei meinem derzeitigen Design der Applikation nicht wirklich weiter.
Die Software geht grob umschrieben wie folgt vor:

In Main werden PipedInput- und PipedOutputstreams erstellt. Der Inputstream wird einem Consumer Thread übergeben, der dann startet.
Ein weiterer Thread erhält den Outputstream. Bei diesem Thread handelt es sich um einen Listener, der auf eingehende Daten wartet.
Werden diese empfangen, erstellt der Listener einen neuen verarbeitenden Thread und übergibt diesem den Outputstream.
Dieser gibt bei der Verarbeitung weiter an den Outputstream.
Darüber hinaus ist es jedem verarbeitenden Thread möglich, weitere Threads starten zu lassen (über Timer), neue Instanz des verarbeitenden Threads, also mit Übergabe des Outputstreams.

Nach der allgegenwärtigen Meinung müsste ich im Prinzip am Ende (der run Methode) der verarbeitenden Threadklasse den Stream mit close schließen.
Tue ich dies, schlägt der 2. Aufruf eines verarbeitenden Threads an der nächsten Stelle, wo auf den Stream geschrieben werden soll, fehl, vermutlich weil der Stream geschlossen wurde.

Welche Änderungen an der Vorgehensweise wären hier sinnvoll?
Bisher habe ich nur Beispiele gefunden, wo immer nur ein Producer- und ein Consumer-Thread genutzt wurden, bei mir sind es, wie gesagt, eine unbekannte Anzahl von Threads, die auf den Stream zugreifen müssen.

Danke schon mal im Voraus für eine Antwort.

Back to de.comp.lang.java | Previous | NextNext in thread | Find similar


Thread

PipedOutputStream Write end dead marcell.thissen@gmail.com - 2017-06-27 05:05 -0700
  Re: PipedOutputStream Write end dead Joerg Meier <joergmmeier@arcor.de> - 2017-06-28 08:05 +0200

csiph-web