Ich versuche, meinen Haupt-Thread von einem neuen Thread zu starten und nach einiger Zeit das Interrupt-Flag zu setzen. Wenn er dies tut, sollte der gespawnte Thread dieses Flag sehen und sich selbst beenden.
Der Hauptfaden sieht in etwa so aus:
final Thread t = new Thread()
{
@Override
public void run()
{
f();
}
};
t.start();
try
{
t.join(time);
t.interrupt();
if(t.isAlive())
{
t.join(allowance);
if(t.isAlive())
throw new Exception();
}
}
catch(Exception e)
{
System.err.println("f did not terminate in the alloted time");
}
Und der gespawnte Thread hat einen Haufen der folgenden Dinge in seinem Code verstreut:
if(Thread.interrupted()) return;
Wenn ich im Debug-Modus bin, funktioniert alles perfekt. Die Unterbrechungsflagge wird vom Hauptthread ausgelöst und vom gespawnten Thread abgefangen. Im normalen Ausführungsmodus scheint der gespawnte Thread das Unterbrechungsflag jedoch nicht zu erhalten, egal wie lange ich die Zulage einstelle.
Weiß jemand, was ich falsch mache?
Hinweis: Ich verwende Ubuntu und bin ein absoluter Neuling in Sachen Linux. Kann das Problem mit dem Betriebssystem zusammenhängen? Ich habe den Code nicht auf einem anderen Betriebssystem getestet.