Threads Thread ist nur kurz interrupted, dann wieder nichtmehr

mcemsi

Mitglied
Hallo,

mein Programm besitzt 3 Threads.

Einer dieser Threads dient zur Überwachung und Steuerung der anderen beiden.

Code:
public ThreadController()
	{
		....
		t1 = new Thread(this.fill);
		t2 = new Thread(this.pop);
		
		t1.start();
		t2.start();
	        .....
        }

	public void run() {
	
		while(true)
		{	
			if (Bedingung && !t1.isInterrupted()) 
			{
				t1.interrupt();
				
			}
		}
	}

Die run der untergeordneten Threads hat folgende Form:

Code:
public void run() {
		while (!Thread.currentThread().isInterrupted()) {
			....
		}
		System.out.println("ende t1");
	}

Das ganze funktioniert auch eigentlich. Nach dem Eintreffen der Bedingung wird interrupt aufgerufen die run methode bricht aus der while Schleife aus, und direkt danach liefert t1.isInterrupted true zurück. Dies tut isInterrupted allerdings nur im selben Schleichendurchlauf nach dem Aufruf von interrupt. Danach liefert isInterrupted wieder false, obwohl der Thread nichtsmehr tut.


Viele Grüße,
mcemsi
 
@mcemsi
und wer sagt, dass ein beendeter Thread dort true liefern sollte?
das ist vielleicht dein Wunsch, wäre für andere aber möglicherweise unpassend,
sollte letztlich egal sein, bei einem nicht mehr fahrbereiten Auto ist egal ob der Kilometerzähler auf 0 steht,

frage auch isAlive() ab, dann hast du eine eindeutige Zustandsbeschreibung,
falls du auch nach Thread-Ende noch exakt wissen willst, ob zuletzt dieses Flag gesetzt war oder nicht,
dann musst du es wohl in einer eigenen boolean-Variable retten

edit
@Michael...
das interrupt fand ja sicher statt als der Thread noch lebte
 
hm ich verstehe nicht ganz was du meinst.

Sei dahin gestellt ob er noch läuft nach dem ich interrupt aufgerufen habe oder nicht, aber wenn ich ihn interrupte, dann sollte er danach doch auch interrupted sein oder nicht?

isInterrupted gibt mir ja auch direkt danach true zurück, springt aber irgendwie wieder auf false zurück
 

Zurück
Oben