Ich versuche, meinen Haupt-Thread aus einem neuen Thread spawnen und nach einiger Zeit die Interrupt-Flag zu erhöhen. Wenn dies der Fall ist, sollte der erzeugte Thread dieses Flag sehen und sich selbst beenden.Threading in Java
Der Haupt-Thread sieht wie folgt aus etwas:
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 erzeugte Thread hat ein Bündel der während seiner gesamten Code verstreut folgende:
if(Thread.interrupted()) return;
Wenn ich im Debug-Modus, alles funktioniert perfekt. Das Unterbrechungsflag wird vom Hauptthread ausgelöst und vom gespawnten Thread abgefangen. Im regulären Ausführungsmodus scheint jedoch der erzeugte Thread das Unterbrechungsflag nicht zu empfangen, egal wie lange ich die Toleranz festlege.
Weiß jemand, was ich falsch mache?
Hinweis: Ich benutze Ubuntu und bin zu allem Linux neu. Kann das Problem mit dem Betriebssystem auftreten? Ich habe den Code auf keinem anderen Betriebssystem getestet.
Wird die Nachricht "f wurde nicht in der zugewiesenen Zeit beendet?" Gedruckt? –
f ist eine Funktion, die für immer ausgeführt wird, wenn die Möglichkeit gegeben wird. Also ist die Erlaubnis die Zeit, die f benötigt, um den Interrupt zu erfassen und zu beenden. Außerdem wird die Nachricht gedruckt, wenn die Erlaubniszeit abgelaufen ist. – user108088
Wenn Ihre Funktion eine Weile ist (true), sollten Sie die Bedingung ändern, wenn Sie überprüfen, ob der Thread unterbrochen ist. –