Hallo zusammen,
ich habe in einer Anwendung einen Thread, der folgendermaßen gestartet wurde:
Bei xxx handelt es sich um ein Objekt, welches eine Schnittstelle implementiert, die direkt von Runnable erbt. So weit so gut. Doch wie stoppe ich einen solchen Thread wieder sauber?
Gemäß http://java.sun.com/j2se/1.3/docs/guide/misc/threadPrimitiveDeprecation.html kann
zu inkonsistenten Daten führen. Sie empfehlen daher, in der run()-Methode des Threads permanent eine Variable zu überpüfen, die in der stop()-Methode verändert werden kann. Dies kann dann quasi so aussehen:
Zumindest verstehe ich das Beispiel so ähnlich. Nun gelingt es mir leider nicht, dieses saubere Beenden auf meine Implementierung oben anzuwenden. Wo genau sollte ich denn jetzt diese stop()-Methode implementieren? In der Klasse von xxx (siehe Beispiel oben, ist quasi ein Runnable) macht es ja keinen Sinn, denn ich würde später ja doch wieder die Methode stop() des Objekts t aufrufen - oder doch direkt von xxx, so dass ich quasi sage
Würde dies den Thread t sauber beenden, oder gibts da was anderes?
Wenn ich direkt von Thread ableite kann ich stop() nicht überschreiben, da dies eine final-Methode ist.
Bin für jede Anregung und jeden Denkanstoß dankbar,
viele Grüsse
JBubble
ich habe in einer Anwendung einen Thread, der folgendermaßen gestartet wurde:
Code:
Thread t = new Thread(xxx);
t.start();
Bei xxx handelt es sich um ein Objekt, welches eine Schnittstelle implementiert, die direkt von Runnable erbt. So weit so gut. Doch wie stoppe ich einen solchen Thread wieder sauber?
Gemäß http://java.sun.com/j2se/1.3/docs/guide/misc/threadPrimitiveDeprecation.html kann
Code:
t.stop();
zu inkonsistenten Daten führen. Sie empfehlen daher, in der run()-Methode des Threads permanent eine Variable zu überpüfen, die in der stop()-Methode verändert werden kann. Dies kann dann quasi so aussehen:
Code:
private volatile boolean running = true;
public void stop() {
running = false;
}
public void run() {
while(running) {
...
}
}
Zumindest verstehe ich das Beispiel so ähnlich. Nun gelingt es mir leider nicht, dieses saubere Beenden auf meine Implementierung oben anzuwenden. Wo genau sollte ich denn jetzt diese stop()-Methode implementieren? In der Klasse von xxx (siehe Beispiel oben, ist quasi ein Runnable) macht es ja keinen Sinn, denn ich würde später ja doch wieder die Methode stop() des Objekts t aufrufen - oder doch direkt von xxx, so dass ich quasi sage
Code:
// Thread t stoppen:
xxx.stop();
Würde dies den Thread t sauber beenden, oder gibts da was anderes?
Wenn ich direkt von Thread ableite kann ich stop() nicht überschreiben, da dies eine final-Methode ist.
Bin für jede Anregung und jeden Denkanstoß dankbar,
viele Grüsse
JBubble