Thread beenden und wieder starten?

Status
Nicht offen für weitere Antworten.
J

JayJay

Gast
So Leute, estmal schonen guten Tag.



Problematik;
Ich habe einen Thread, der einen Prozess aufruft und wartet, bis dieser beendet wird, funktioniert alles super:

Code:
MyApp extends Thread{
	private int run(){
        try{
        	OutputList.add("app started");
        	String cmd	= app_file;
        	
        	System.out.println("ServiceApp started");

        	// start process
        	this.process = Runtime.getRuntime().exec( cmd  );
        	
        	// handle process output-data
	        BufferedReader input = new BufferedReader(new InputStreamReader(this.process.getInputStream()));

	        String line;
        	while ((line = input.readLine()) != null) {
        		//System.out.println("Out:"+line);
        		onLineOutput( line );
        	}//while

        	this.process.waitFor(); // wait for app-self termination (hier evt das problem)??
        	//this.proces
        	
        	// clean-up
        	input.close();
        	this.process.destroy();
        	
        	return this.process.exitValue();
        	//return 1;
        	
	    }catch( Exception e ){
	    	e.printStackTrace();	// print error stack
	    }
            System.out.println("app closed");
	    return -1;
	}

        public void _stop(){
        process.destroy();
        stop();
}


Wenn ich nun den Thread starte, funktioniert alles wunderbar, das Programm wird gestartet. Wenn ich nun _stop() aufrufe wird das programm ebenfalls wunderbar beendet. Nur der thread scheint sich wohl in einem "wartungszustand" zu befinden

"System.out.println("app closed");" wird nicht ausgefürtt. !!!!

Wenn ich nun erneut den Thread via "start()" aufrufen möchte klappt nix :( (Thread startet sich nicht mehr).


Kann mir da evt. jemand weiterhelfen?

Würde mich über eine antwort freuen

Gruß jayjay
 
T

tuxedo

Gast
[erster Post-versuch wegeditiert]

Mist, hatte nicht alles gelesen.. Jetzt steht hier ein Beitrag der völlig unnötig ist ;-(
 

Murray

Top Contributor
JayJay hat gesagt.:
Wenn ich nun erneut den Thread via "start()" aufrufen möchte klappt nix

API-Dokumentation hat gesagt.:
start

public void start()

Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread.

The result is that two threads are running concurrently: the current thread (which returns from the call to the start method) and the other thread (which executes its run method).

It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.
 
T

tuxedo

Gast
Macht das auch Sinn wenn ich nur einen Thread habe der immer mal wieder läuft?

- Alex
 

byte

Top Contributor
Jup, Executors#newSingleThreadExecutor() liefert Dir den entsprechenden Service dafür.
 

tfa

Top Contributor
Murray hat gesagt.:
JayJay hat gesagt.:
"System.out.println("app closed");" wird nicht ausgefürtt. !!!!
Wieso sollte das denn auch der Fall sein? Beim Stoppen wird die run-Methode doch komplett "abgewürgt".

Man sollte noch erwähnen, dass Thread.stop() böse[tm] ist. Diese Methode ist deprecated und sollte
niemals benutzt werden (Erklärung in den den API-Doks).
 

Niki

Top Contributor
Warum leiten eigentlich die meisten von Thread ab anstelle das Runnable Interface zu implementieren? Runnable implementieren ist doch die viel schönere Variante....
 
T

tuxedo

Gast
Niki hat gesagt.:
Runnable implementieren ist doch die viel schönere Variante....

"Schönheit ist vergänglich" .. Okay, Spass bei Seite. Es gibt halt solche und solche. Und manchmal machts halt Sinn von Thread zu erben..
 
T

tuxedo

Gast
Hmm, lass mich mal überlegen, hatte erst kürzlich nen Fall wo ich's geschickter fand ...

[update]
Mir fällt's jetzt gerade nicht mehr ein. Aber was anderes:
Was mache ich wenn ich den Thread irgendwie abfragen will... Meinetwegen den Thread arbeitet irgendwas ab und ich hab ne Art Service-Methode wo ich den aktuellen Bearbeitungsstand abfragen kann. Wie mach ich das wenn ich nur Runnable implementiere?

- Alex
 
T

tuxedo

Gast
Oh mann. Wieso bin ich da bis jetzt noch nicht drauf gekommen?! Na manchmal sieht man echt den Wald vor lauter Bäumen nicht.

- Alex
 

byte

Top Contributor
alex0801 hat gesagt.:
Wie mach ich das wenn ich nur Runnable implementiere?
Kannst Du doch genauso in einem Runnable implementieren wie in einem Thread. Wo ist das Problem?

Code:
MyRunnable runnable = new MyRunnable();
executor.submit(runnable);
System.out.println(runnable.getBearbeitungsstand());
 

phyrexianer

Bekanntes Mitglied
ich denke man nimmt eher Thread weil damit eher einen "paralellen" Prozes in Verbindung bringt.... bei Runnable einfach nur etwas was "Rennt" ;-)
 
T

tuxedo

Gast
Und wo belegt das, dass man nicht von Thread erben sollte?

Gibt es denn eine "Design-Richtlinie" oder "Convention" die das belegt, oder hat sich das einfach nur "unter der Hand eingebürgert"?

Nicht dass ich das verwenden des Runnable-Weges nicht gut heißen will. Mich interessiert es einfach nur. Gibts denn, abgesehen von der Geschmackssache was besser aussieht Vor- und Nachteile?

- Alex
 

byte

Top Contributor
Es geht doch nicht darum, was besser aussieht. Durch die Implementierung der Logik in einem Runnable reduzierst Du einfach die Kopplung. Wenn Du mit der aktuellen Concurrency API arbeitest, brauchst Du generell nie mehr explizit Threads erzeugen. Du arbeitest ausschließlich mit Runnables oder Callables. Das hat den großen Vorteil, dass Threads wiederverwendet werden können, was Performance bringt, da Thread-Erzeugung teuer ist. Und selbst, wenn Du nicht auf Executor und Co. baust, dann bist Du flexibler, wenn Du mit Runnables arbeitest und diese dann dem Thread übergibst. Vielleicht ändert sich zu einem späteren Zeitpunkt das Design und die Logik soll nun doch nicht mehr in einem separaten Thread laufen. Wenn Du die Logik fest in einem Thread verdrahtest, bist Du auch auf diesen Thread festgefahren. Und last but not least ist es immer besser, ein Interface zu implementieren als eine Klasse zu erweitern. Du kannst problemlos ein Runnable implementieren und gleichzeitig von einer anderen Klasse erben. Bei Threads wird das nichts.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Thread beenden Allgemeine Java-Themen 9
U Thread beenden Allgemeine Java-Themen 3
B Erkennen, wann Prozess beendet ist, dann Thread beenden. Allgemeine Java-Themen 6
S [THREADS] Thread sinnvoll beenden Allgemeine Java-Themen 2
O Thread beenden egal welcher Zustand? Allgemeine Java-Themen 8
S Thread beenden Allgemeine Java-Themen 50
G Thread nach x Sekunden beenden ... Allgemeine Java-Themen 8
B Thread beenden (von anderer Klasse) Allgemeine Java-Themen 20
S Thread nach Timeout beenden Allgemeine Java-Themen 2
B Thread soll anderen Thread beenden Allgemeine Java-Themen 5
O Thread beenden (gnadenlos und ohne rücksicht auf Verluste) ? Allgemeine Java-Themen 17
S Thread per GUI Beenden Allgemeine Java-Themen 3
F Thread beenden ? Allgemeine Java-Themen 4
R Thread beenden und warten, bis er fertig ist Allgemeine Java-Themen 4
A Wie kann man diesen thread beenden? Allgemeine Java-Themen 17
D Thread & Process: Beenden einer Batch-Datei Allgemeine Java-Themen 8
G Thread beenden Allgemeine Java-Themen 2
conan2 BufferedReader.readLine() von anderem Thread aus beenden Allgemeine Java-Themen 4
D Thread durch Mouse-Event beenden Allgemeine Java-Themen 5
F Thread beenden Allgemeine Java-Themen 5
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
smarterToby Wie stoppe ich diesen Thread Allgemeine Java-Themen 4
A Thread.sleep Problem Allgemeine Java-Themen 2
J Thread started nur einmal Allgemeine Java-Themen 19
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
OnDemand Logfile pro User / Thread Allgemeine Java-Themen 7
OnDemand Thread / Service abbrechen Allgemeine Java-Themen 3
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
P Swing Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: npoints > xpoints.length || npoints > ypoints.length Allgemeine Java-Themen 5
B Thread.sleep() in EJB Container wie lösen? Allgemeine Java-Themen 11
S Ist das Neuzuweisen von Feldern atomic und damit Thread-Safe? Allgemeine Java-Themen 2
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
Flynn Thread-Problem... Allgemeine Java-Themen 2
G Thread-Programmierung Allgemeine Java-Themen 5
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
G Beendet sich der Thread selbst?! Allgemeine Java-Themen 3
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
Aruetiise Swing JOptionPane ohne denn Thread zu pausieren Allgemeine Java-Themen 1
M Nanosekunden-Pause innerhalb einen Thread-Loops Allgemeine Java-Themen 3
E Thread Exception Allgemeine Java-Themen 6
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
T Merkwürdiges Thread-Verhalten Allgemeine Java-Themen 6
K Thread Problem Allgemeine Java-Themen 6
W Thread sleep 30 sekunden - wenn keine Antwort bis dahin neu senden Allgemeine Java-Themen 2
H Thread bleibt stehen bei jar in jar Allgemeine Java-Themen 1
J Threads HTTP Request (Thread) dauert lange - in Android Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
P Threads BufferedImage, Thread Concurrency Allgemeine Java-Themen 1
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
llabusch Thread blockiert Dialog Allgemeine Java-Themen 1
J Thread wait() Allgemeine Java-Themen 2
V Thread.sleep und InterruptedException? Allgemeine Java-Themen 1
G Thread nicht von GC zerstört Allgemeine Java-Themen 6
J Wie erschaffe ich einen sicheren Datenaustausch zwischen Thread und Nicht-Threads Allgemeine Java-Themen 8
Sogomn Thread blocken bis Taste gedrückt Allgemeine Java-Themen 5
T Starten vom Thread Allgemeine Java-Themen 3
T Wait/Notify() bei Thread Allgemeine Java-Themen 6
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
M Exception in thread "AWT-EventQueue-0" Allgemeine Java-Themen 6
Q Thread wacht nicht auf Allgemeine Java-Themen 7
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
T Threads Input/Output im Thread - Datei ohne Inhalt Allgemeine Java-Themen 1
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
W Threads Mit Thread und Runtime externe Programme öffnen Allgemeine Java-Themen 0
N Thread interrupt Status debuggen Allgemeine Java-Themen 6
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
E Threads linkedlist/multi-thread problem Allgemeine Java-Themen 3
A Thread Fehler absichtlich provozieren Allgemeine Java-Themen 3
B Threads Java Thread kommunizieren Allgemeine Java-Themen 12
N Thread Sicherheit im komplexen Datenmodell Allgemeine Java-Themen 7
K Thread richtig benutzen Allgemeine Java-Themen 3
K Exception in thread "AWT-EventQueue-1" Allgemeine Java-Themen 2
vandread Problem bei kleiner Thread-Übung Allgemeine Java-Themen 2
G Thread erzeugt nicht plausible NullPointerException Allgemeine Java-Themen 7
H Netbeans Warning bei Thread.sleep in Schleife Allgemeine Java-Themen 4
P [Thread] Scheint nicht Sequenziell zu Arbeiten Allgemeine Java-Themen 9
A eine test thread.join() frage Allgemeine Java-Themen 2
tuttle64 Verständnisprobleme mit Thread Locks Allgemeine Java-Themen 4
G Threads Thread bei Datenabfrage Allgemeine Java-Themen 3
S Thread anhalten per Button ? Allgemeine Java-Themen 3
E Thread Programmierung Allgemeine Java-Themen 2
S Threads ServerSocket-Thread soll schlafen, bis er gebraucht wird Allgemeine Java-Themen 2
V Thread schneller stoppen Allgemeine Java-Themen 2
V anstatt thread.join() einfach while schleife? Allgemeine Java-Themen 8
B Mausbewegung im Thread erkennen (hoch/runter) Allgemeine Java-Themen 6
G Linux/C++/Pthreads auf JVM zugreifen, thread safe? Allgemeine Java-Themen 10
K Threads Probleme mit Thread Allgemeine Java-Themen 13
K Threads Thread überprüfen Allgemeine Java-Themen 3
Z Threads Thread für einen Client Allgemeine Java-Themen 9
M Thread JavaFish Allgemeine Java-Themen 10
G Thread.sleep Allgemeine Java-Themen 12
M Threads Viele Aufrufe aus Thread, komisches Verhalten Allgemeine Java-Themen 8
B Threads Main Thread warten auf abgebrochen Task warten lassen Allgemeine Java-Themen 25

Ähnliche Java Themen

Neue Themen


Oben