Was macht Thread, wenn er aus einem "leeren" Inputstream liest ?

Mondlichtung

Mitglied
Hallo :)

Die folgende Frage kam mir währes des Lesens des Chat Beispiels unter
http://www.java-forum.org/netzwerkprogrammierung/5507-netzwerkgrundlagen-serversocket-socket.html
auf.

Dort heißt es unter anderem:
Java:
class ClientBody extends Thread {
   private InputStream i;
   public ClientBody(InputStream i) {
      this.i=i;
   }
 
   public void run() {
      String buffer;
      BufferedReader in;
      int n;
      try {
         in = new BufferedReader(new InputStreamReader(i));
         while ((buffer = in.readLine()) != null) {            
            if ((n = buffer.indexOf("users|", 0)) > -1) {
               buffer = buffer.substring(n + "users|".length(), buffer.length());
               buffer = buffer.replace('|', ',');
               System.out.println("\n\n==>Angemeldete User: " + buffer);            
            } else
               System.out.println("\n\n==>Eingang von " + buffer);
            System.out.print("\nText eingeben -> <zielrechner> <message># ");      
         }
         
      } catch (Exception e) {}   
   }
}
Soweit ich das Beispiel verstanden habe, wird der ClientBody dazu benutzt einen Thread im Hintergrund des Clients laufen zu lassen, der Nachrichten vom Server (z.B. wenn jemand anderes etwas schreibt) empfängt. Dabei wird obige while Schleife solange gelesen, bis nichts mehr aus dem InputStream gelesen werden kann, d.h. null wird zurückgeliefert.

Frage:
Wird null nicht sofort erreicht, sobald keiner etwas schreibt ?
Falls nein, was passiert dann ? Der Thread wird schlafen gelegt, bis der InputStream etwas hergibt ?

Dankeschön, Mondlichtung
 
T

Tomate_Salat

Gast
null wird zurückgegeben, wenn der inputstream in der read-Methode [c]-1[/c] zurückgibt (Stream ist zuende). Ansonsten wird gewartet bis ein "Zeilenumbruch" gesendet wird. Danach wird der String in der readLine() zurückgegeben.
 

Mondlichtung

Mitglied
Danke soweit für die Antworten.

Ich habe das von mir erwähnte Beispiel ausprobiert und es funktioniert auch sehr gut.
Der Thread ClientBody, der im Hintergrund des Clients läuft und auf Nachrichten wartet, beendet sich nicht vorzeitig. D.h. die readLine Methode "wartet" auf neue Daten. Ich nehme an, der Thread wird solange schlafen gelegt (um Ressourcen zu sparen) ?

Desweiteren würde mich interessieren, warum er gerade bei dieser Methode wartet ?
In der Java API unter readLine() konnte ich leider keine weiteren Informationen dazu finden.
Vielleicht kann mir jemand einen Link empfehlen, wo ich das genauer nachlesen kann?

Schöne Grüße, Mondlichtung
 

Mondlichtung

Mitglied
Siehe hier: [japi]InputStream#read()[/japi]

Klasse, danke.

Auch interessant ist dann die Frage, wie wird blockiert? Wird der Thread in den sleep Status versetzt oder verbraucht er durch ständiges Abfragen Ressourcen?

Unter
networking - Java BufferedReader readline blocking? - Stack Overflow
hat jemand dies unter Linux getestet mit dem Ergebnis, dass der Thread im Sleep Status ist.

Falls jemand hierzu genaueres weiß oder die Aussage aus dem Link bestätigen kann, das würde mich interessieren.

Schöne Grüße, Mondlichtung
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Was macht WebEndPoint ? Netzwerkprogrammierung 2
windl URLConnection unter 1.7 macht Probleme Netzwerkprogrammierung 14
reibi Proxy macht Problem abeim URL-Aufruf Netzwerkprogrammierung 3
D EA-Exception Network Adapter macht probleme Netzwerkprogrammierung 2
K RMI macht Anwendung langsam? Netzwerkprogrammierung 8
N Java-Chat (lauffähig) macht Probleme auf der Konsole Netzwerkprogrammierung 6
OnDemand Thread und Ratelimiter Netzwerkprogrammierung 4
F Thread "extern" beenden Netzwerkprogrammierung 3
OnDemand Linux RAM per Thread Netzwerkprogrammierung 3
V Socket Audio Clip loopen ohne neuen Thread Netzwerkprogrammierung 2
C Thread Netzwerkprogrammierung 9
platofan23 Socket Hilfe mit Socket Thread und ArrayList Netzwerkprogrammierung 6
A RMI RMI - Thread Objekte übertragen und auf anderer Machine weiterlaufen lassen Netzwerkprogrammierung 0
S Socket ThreadPool oder Thread pro Client? Netzwerkprogrammierung 11
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
P Wie spreche ich einen Thread an? Netzwerkprogrammierung 20
M Thread Scheduler Java 5.0? Netzwerkprogrammierung 2
7 Mehrere Verbindungen gleichzeitig in einem Thread mit ApacheHTTP Netzwerkprogrammierung 7
D Socket Dynamische Socket-Thread Erzeugung Netzwerkprogrammierung 2
B Socket Thread handling / Reader init Netzwerkprogrammierung 8
Z Socket Socket-Thread falsch? Netzwerkprogrammierung 5
Helgon Socket Thread Pooling Netzwerkprogrammierung 6
B callback thread udp Netzwerkprogrammierung 2
D RMI und Thread Netzwerkprogrammierung 4
S Kommunikationsproblem, Thread und manuel Netzwerkprogrammierung 4
U Socket Abhören eines Sockets/Ports in extra Thread Netzwerkprogrammierung 8
K ein Thread pro Stream Netzwerkprogrammierung 2
D Weiterer Thread auf Port 843 horcht Netzwerkprogrammierung 7
D Thread problem Netzwerkprogrammierung 3
S Thread, Daten vom Socket lesen Netzwerkprogrammierung 2
S Thread Transport Netzwerkprogrammierung 6
S Socket Thread in Schleife Netzwerkprogrammierung 4
G Objekte per TCP verschicken + Thread Netzwerkprogrammierung 4
T synchronized mit thread und rückgabe Netzwerkprogrammierung 4
Q Thread und Sockets... Netzwerkprogrammierung 2
2 Class mit ServerSocket erbt von Thread? Netzwerkprogrammierung 3
PAX Outputstream von anderem Thread verwenden lassen Netzwerkprogrammierung 5
C Server mit Multithreading (Thread-Pool) Netzwerkprogrammierung 2
E java.lang.NullPointerException aber nur wenns im Thread läuf Netzwerkprogrammierung 4
F EIN Thread in RMI auf Serverseite Netzwerkprogrammierung 3
G Server Thread beenden Netzwerkprogrammierung 16
T Socket-Thread: Designfrage Netzwerkprogrammierung 14
S Mit Thread arbeitende Maschine Netzwerkprogrammierung 6
T select() ohne NIO - oder wie Worker-Thread sauber beenden? Netzwerkprogrammierung 9
K Selbe Streams mehrfach nutzen (zusätl. Thread) Netzwerkprogrammierung 6
ven000m Thread Frage Netzwerkprogrammierung 11
B Thread.start() (run()) excption Netzwerkprogrammierung 2
M Thread läuft nicht weiter Netzwerkprogrammierung 2
B NullPointerException | Thread Netzwerkprogrammierung 4
U Current thread not owner Netzwerkprogrammierung 3
S readline-thread stoppt vorzeitig Netzwerkprogrammierung 6
J RMI - (RemoteException occurred in server thread) Netzwerkprogrammierung 2
S Webserverprogrammierung: Thread-Beschränkung Netzwerkprogrammierung 2
M Exception in thread "main" java.lang.NoClassDefFou Netzwerkprogrammierung 2
F problem mit thread bzw. netzwerkverbindung! Netzwerkprogrammierung 3
L netzwerk mit thread Netzwerkprogrammierung 3
G RMI thread safe ? Netzwerkprogrammierung 11
A Thread gibt Nachrichten mehrmals aus (Messenger in Java) Netzwerkprogrammierung 3
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
Z Socket UDP Unicast blockiert wenn Ziel offline Netzwerkprogrammierung 1
F GSON wenn das Json verschiedene Klassen enthält Netzwerkprogrammierung 1
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
J UDP port packete lesen,wenn dieser besetzt ist Netzwerkprogrammierung 3
P Server/Client Daten empfangen, wenn Daten gesendet werden Netzwerkprogrammierung 9
K Vom Socket lesen wenn das Gegenüber schon disconnected ist? Netzwerkprogrammierung 12
W Bestimmt IP Adresse verwenden wenn man mehrere hat Netzwerkprogrammierung 5
E CPU Auslastung bei 100% wenn Server gestartet wurde. Netzwerkprogrammierung 2
W RMI funktioniert nur wenn ich im selben Eclipse Projekt bin Netzwerkprogrammierung 3
S ServerSocket merkt nicht, wenn keiner mehr da ist Netzwerkprogrammierung 8
K Wenn socket geöffnet, warten dann öffnen ! Netzwerkprogrammierung 3
J Prblem, wenn im verschickten Objekt ein Array ist Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben