[gelöst] Java: Wie Thread B beenden falls Ereignis in A?

mada

Hacker
Hallo zusammen,

ich finde einfach keine Lösung, denke aber, dass sie einfach sein muss:

Über eine (SWT-)GUI starte ich einen Thread aus einer anderen Klasse der eine for-Schleife mit n loops ausführt:
Code:
externerThread doSomething = new externerThread(n);
doSomething.start();
Soweit so gut und einfach. Nun möchte ich aber diesen Thread vorzeitig unterbrechen können, falls in der GUI ein BREAK-Knopf oder ähnliches gedrückt wird und z.B. ne boolean auf false gesetzt wird, sodass eine Abfrage in der for-Schleife ein break o.ä. auslösen kann.

Denke ich zu kompliziert? Gehts auch einfacher? Irgendwie muss das doch mit notify und wait zu machen sein?

Vielen Dank schon mal für Anregungen,
Daniel


NACHTRAG:
So ist das immer -- man sucht ewig, findet nix, postet die Frage und wenige Minuten nach dem Absenden stolpert man dann doch über eine recht praktische Möglichkeit: wenn ich die Klasse des Threads ändern kann, dann könnte ich eine pleaseStop()-Methode schreiben, die eine Break Variable setzt... also quasi so:
Code:
public void pleaseStop()
{
	this.endLoop = true;
}

...

		if (endLoop)
			break;

Gibts aber auch Möglichkeiten die KEINE Veränderung der Klasse nötig machen und angenommen die Klasse hat nur eine run()-Mehode, sonst nichts...


AH GELÖST: es gibt natürlich eine Thread.stop()-Methode! Besser natürlich man schreibt eine eigene Methode in der Threadklasse, die keine Objekte in inkonsistenten Zuständen zurücklässt!
 

TeXpert

Guru
mada schrieb:
AH GELÖST: es gibt natürlich eine Thread.stop()-Methode! Besser natürlich man schreibt eine eigene Methode in der Threadklasse, die keine Objekte in inkonsistenten Zuständen zurücklässt!

NO DO NOT USE thread.stop.

wie Du unschwer in der API erkennen kannst ist stop() deprecated, siehe dazu auch: http://java.sun.com/j2se/1.3/docs/guide/misc/threadPrimitiveDeprecation.html
 

mada

Hacker
ah, ich hätte wohl mal noch einen genaueren Blick in die API werfen sollen :)

Vielen Dank für den Link! Jedenfalls ist das Fazit wohl dann eindeutig, dass man die Threadklasse mit einer geeigneten stop()-Methode ausstatten sollte. Habs grad so gemacht, und da mein Thread nicht lange Zeit auf input wartet funktioniert das auch einwandfrei ohne interrupt...
 
Oben