Performante Implementierung eines "Hintergrundprogramms"

enbima

Mitglied
Hallo,

ich möchte gerne dass mein Programm im Hintergrund läuft und auf eingaben wartet. Wie die Eingabe erfolgt ist erstmal egal, wird wohl irgendwie über eine GUI realisiert. Jedenfalls möchte ich dass das Programm auf einem Server im Hintergrund läuft und auf die verschiedenen Eingaben reagiert.
Im Moment habe ich das so gelöst, dass ein Thread gestartet wird und in der run() - Methode eine Endlosschleife läuft, die bei jedem Durchlauf auf neue Eingaben prüft und ggf. bearbeitet.
Das ganze ist allerdings alles andere als schön und verursacht eine volle Prozessorauslastung von 2 Kernen. Daher wollte ich mal wissen wie so der allgemeine Ansatz aussieht um ein Programm zu implementieren, dass dauerhaft läuft und auf Eingaben reagiert.

mfG
 

faetzminator

Gesperrter Benutzer
Wenigstens ein [c]Thread.yield()[/c] solltest du implementieren ;) Sprichst du von GUI und deiner Logik in der ein und derselben Applikation? Wenn ja, dann einfach den Code auf einen Listener ausführen. Wenn nicht, dann können die SWs miteinander z.B. per Socket kommunizieren. Auch da wartet man, bis ein Client sich angemeldet hat. Meist ist eine Endlosschleife ein Designfehler.
 

enbima

Mitglied
Das ganze sieht in etwa so aus: Es existiert ein Telnet-Server zu dem ich eine Socketverbindung aufbaue. Der Thread wird dann gestartet und kommuniziert mit dem Server, also er übergibt Befehle an den Telnet-Server und holt sich die Antworten vom Server. Das ganze läuft in der Endlosschleife, sodass ich zu jeder Zeit weitere Befehle übergeben kann und dann die Antwort vom Server empfange. Die Befehle werden über die GUI übergeben. Was wäre hier ein gutes Design?
 

faetzminator

Gesperrter Benutzer
Also Antworten empfängst du sowieso immer in einem zweiten Thread, dieser ist warscheinlich mit [c]readXY()[/c] blockiert? Und auf der anderen Seite (GUI) musst du nicht immer checken, du kannst einfach ein Listener an dein Button, Textfeld, ... setzen und dann die Befehle absetzen.
 

enbima

Mitglied
Ja es laufen 2 Threads, ein Thread der Ein und Ausgaben an den Server verwaltet und ein Thread der die Ein und Ausgaben zum Client verwaltet. Blockiert wird von mir keiner von beiden. Die Endlosschleife in den beiden Threads iteriert die ganze Zeit über einen Inputstream um auf neue Eingaben zu reagieren.
 

enbima

Mitglied
Java:
	public void run() {	
		LinkedList<String> stringlist;
		String time = new SimpleDateFormat("HH.mm.ss").format(new Date());
				
		while(true){																
			if(!list.isEmpty()){																	
				stringlist = inputStreamToStringList(list.poll());									
				for(String string : stringlist){
					if(output != null){																
						output.print(string + "\r\n");												
						output.flush();																
					}
				}
			}
		}
	}

Die LinkedList<String> enthält den jeweiligen Inhalt des Inputstreams als String (Entweder ein Befehl oder die Antwort vom Server, je nach Instanz). Ein neuer Befehl wird dann einfach als Inputstream hinzugefügt und von der Methode inputStreamToStringList() in die LinkedList<String> geschrieben.
 

faetzminator

Gesperrter Benutzer
Auf die Telnetverbindung solltest du etwa so hören:
Java:
String input;
while ((input = reader.readLine()) != null) {
    machIrgendwas(input);
    // kannst es ja noch ausgeben lassen zum test ;)
    System.out.println("> " + input);
}
Und vom GUI - wie gesagt, mit einem Listener.
 

enbima

Mitglied
Ok, soweit hab ich die Idee verstanden, allerdings bin ich mir bei bestimmten Dingen noch nicht im Klaren. Ich würde jetzt über eine Schleife den InputStream auslesen (über einen BufferedReader mit readLine() ... wie du schon geschrieben hast). Das würde ich alles in der run() - Methode des Threads machen. In der GUI würde ich einen Listener schreiben, der auf die Eingabe reagiert. Unklar ist jetzt was ich im Listener aufrufen muss? Muss ich da einen neuen Thread instanzieren oder kann ich einen alten Thread reaktivieren (bin noch nicht so mit Threads vertraut), weil theoretisch müsste ich ja bei jeder Eingabe die run() Methode neu starten.
 

faetzminator

Gesperrter Benutzer
Sowas hab ich auch schon lange nicht mehr gebraucht, aber ich würde wohl einfach den Writer immer offen halten und immer brav flushen. Aber man kann warscheinlich genau so gut immer einen neuen erstellen. Das musst du nicht zwingend in einen neuen Thread auslagern, denn das senden sollte nicht allzu lange gehen. Aber kannst du natürlich.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
ruutaiokwu JRE-/JDK-unabhängige PBKDF2WithHmacSHA512-Implementierung Java Basics - Anfänger-Themen 16
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
J Implementierung gcd();square() Java Basics - Anfänger-Themen 98
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
A Implementierung von String toString methode() Java Basics - Anfänger-Themen 4
G Projekt architektur (implementierung) Java Basics - Anfänger-Themen 3
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
J Implementierung eines Zustandsdiagramms Java Basics - Anfänger-Themen 19
I GenericQueue / Implementierung als Ringspeicher Java Basics - Anfänger-Themen 4
MiMa Log4j2 implementierung Java Basics - Anfänger-Themen 4
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
G Array implementierung Java Basics - Anfänger-Themen 23
J ANTLR Installierung und Implementierung Java Basics - Anfänger-Themen 2
E Hilfe bei Implementierung von Methoden Java Basics - Anfänger-Themen 10
S SkipList Implementierung Java Basics - Anfänger-Themen 1
J Methoden Suche effiziente Implementierung für eine Methode Java Basics - Anfänger-Themen 3
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
E hashCode implementierung Java Basics - Anfänger-Themen 9
S Implementierung der Klasse Konto und Nutzung bereits vorhandener Klassen Java Basics - Anfänger-Themen 7
H Implementierung eines Interfaces erweitern Java Basics - Anfänger-Themen 13
O Generics - Implementierung Java Basics - Anfänger-Themen 7
A Hilfestellung zur Implementierung des Gaußsches Eliminationsverfahren Java Basics - Anfänger-Themen 4
B OOP Implementierung eines Heaps Java Basics - Anfänger-Themen 13
K Bucketsort Implementierung Java Basics - Anfänger-Themen 0
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Klassen Klassendiagramm Implementierung? Java Basics - Anfänger-Themen 5
J Bucketsort Implementierung Java Basics - Anfänger-Themen 0
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
T Collections LinkedList<LinkedList<T>> - Implementierung Java Basics - Anfänger-Themen 10
F Implementierung von Interfaces -> Problem mit main Java Basics - Anfänger-Themen 12
D Resourcebundle implementierung Java Basics - Anfänger-Themen 2
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
Q Implementierung von Listenern Java Basics - Anfänger-Themen 4
B Klassen Hilfe bei Implementierung Java Basics - Anfänger-Themen 5
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3
I Erste Schritte Implementierung der API Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Adressbuches Java Basics - Anfänger-Themen 20
M falsche implementierung von currentTimeMillis() ? Java Basics - Anfänger-Themen 14
G Implementierung eines Kontos Java Basics - Anfänger-Themen 11
M Quicksort implementierung Java Basics - Anfänger-Themen 23
SexyPenny90 Implementierung einer doubly linked list Java Basics - Anfänger-Themen 5
N Binärbaum/Implementierung Java Basics - Anfänger-Themen 9
U Doppelte Interfcae Implementierung Java Basics - Anfänger-Themen 10
K Kleiner Fehler bei Methoden Implementierung Java Basics - Anfänger-Themen 6
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
S OOP Implementierung Komposition, Aggregation, Assoziation und Generalisierung Java Basics - Anfänger-Themen 2
C Klassenhirarchien zur Implementierung von Fahrzegen Java Basics - Anfänger-Themen 26
BinaryLogic Datentypen Statistik Interface - untersch. Implementierung Java Basics - Anfänger-Themen 5
S Saubere Implementierung Java Basics - Anfänger-Themen 2
K Dijkstra implementierung 2.0 Java Basics - Anfänger-Themen 19
K dijskral implementierung Java Basics - Anfänger-Themen 14
U Probleme mit Server-Client implementierung Java Basics - Anfänger-Themen 5
K Game of Life Implementierung Java Basics - Anfänger-Themen 30
B OOP Problem bei Implementierung von Interface Java Basics - Anfänger-Themen 6
J HashSet Implementierung Java Basics - Anfänger-Themen 16
R NullPointerException in Queue-Implementierung Java Basics - Anfänger-Themen 11
X Frage zur Implementierung von equals() Java Basics - Anfänger-Themen 2
B Effektive Implementierung für Darstellung großer Datenmengen in Jogl Java Basics - Anfänger-Themen 5
D Datentypen Implementierung eines Binärbaumes Java Basics - Anfänger-Themen 7
B Implementierung Java Basics - Anfänger-Themen 2
N Implementierung Tic tac toc Java Basics - Anfänger-Themen 25
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
Y Implementierung einer Potenzturm Funktion Java Basics - Anfänger-Themen 4
S Implementierung gegen Interfaces / List, ArrayList, LinkedList Java Basics - Anfänger-Themen 11
J Quicksort Implementierung-- Exception ArrayOutOfBounds Java Basics - Anfänger-Themen 6
U Implementierung Constructor Java Basics - Anfänger-Themen 7
T Problem mit Implementierung von einer HashMap aufgabe Java Basics - Anfänger-Themen 2
G Implementierung des Observer/Observable Patterns - Gut so? Java Basics - Anfänger-Themen 3
I Zugriff auf Implementierung verhindern Java Basics - Anfänger-Themen 8
D Implementierung nach MVC Java Basics - Anfänger-Themen 6
B Theoretische Frage zum Programmbau (nun zur Implementierung) Java Basics - Anfänger-Themen 8
H Implementierung von Interfaces Java Basics - Anfänger-Themen 4
G Implementierung von Bäumen Java Basics - Anfänger-Themen 2
N Probleme mit paint() bei Implementierung in ein Panel Java Basics - Anfänger-Themen 4
B Wie funktioniert die implementierung von c code in Java? Java Basics - Anfänger-Themen 7
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
walid Öffnungszeiten eines Geschäftes Java Basics - Anfänger-Themen 3
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
B Synchronisation eines kleinen Museums Java Basics - Anfänger-Themen 47
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
Sachinbhatt Was ist die Notwendigkeit eines Sammlungsframeworks in Java? Java Basics - Anfänger-Themen 2
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben