2010-07-06 13 views
5

Ich möchte wissen, wie die Ausführung einer bestimmten Funktion innerhalb einer bestimmten Zeit in Java zu stoppen.Ist es möglich, die Ausführung einer Funktion innerhalb einer bestimmten Zeit in Java zu stoppen?

Zum Beispiel: Ich kann eine Funktion namens print_data() aufrufen. Wenn es mehr Zeit zur Ausführung benötigt, muss ich die Ausführung dieser Funktion stoppen.

Ist es möglich, die Ausführung so zu stoppen?

Vielen Dank im Voraus

+0

Sie könnten diese Funktion in einem separaten Thread ausführen und den Thread nach einiger Zeit abbrechen. – BobbyShaftoe

+0

Tut mir leid, ich habe nicht Thread im Programm verwendet, gibt es andere mögliche gibt es? –

Antwort

4

Sie einige Prüfungen an Ihre Funktion könnte hinzufügen: den Zeitstempel speichern, wenn die Funktion zu arbeiten begann und dann innerhalb der Funktion in regelmäßigen Abständen überprüfen, ob eine Ausnahme werfen, wenn die Funktion zu lange dauert.

Dies ist der sauberste Weg, um eine solche Aufgabe in Java zu erreichen.

+0

Ich fing an, über einen Timer-Thread und einen Mechanismus zur Unterbrechung des Prozesses nachzudenken, aber wenn das Drucken in einer Schleife erfolgt, ist Ihre Methode viel einfacher und effektiver. +1. –

2

Sie können die TimeUnit enum von java.util.concurrent, insbesondere die timedJoin Methode verwenden.

Sie geben eine Wartezeit und einen Thread an. timedJoin lässt Ihren Thread bis zur Beendigung ausführen oder stoppt, wenn die Verarbeitung mehr Zeit benötigt als das zulässige Zeitlimit. Sie können eine anonyme Klasse verwenden, um Ihre Methode problemlos in ein Objekt Thread zu verpacken.

Dies kann so einfach sein wie:

SECONDS.timedJoin(
    new Thread() { 
     public void run() { 
     print_data(); 
     } 
    }, 
    10);  

für ein 10 Sekunden-Timeout.

3

Es gibt keine sichere Möglichkeit, die Ausführung eines Threads zu stoppen, es sei denn, es wird kooperativ; z.B. es überprüft regelmäßig die "unterbrochene" Flagge.

@BobbyShaftoe schlägt vor, dies in einem Kommentar:

Sie können diese Funktion in einem separaten Thread ausführen und abbrechen dann den Faden nach einiger Zeit.

Dies ist eine irreführende und gefährliche Empfehlung. Die einzige Möglichkeit, einen Thread abzubrechen, besteht darin, die veraltete Methode Thread.stop() zu verwenden. Wenn Sie sich die für diese Methode ansehen, werden Sie sehen, dass es eine grundsätzlich gefährliche Methode ist, die unerwünschte und unvorhersehbare Nebenwirkungen haben kann.

Es sollte auch beachtet werden, dass die Lösung von @ tonio die Ausführung der Funktion nicht stoppt. Es hört einfach auf, auf die Ausführung der Funktion zu warten. Die Funktion könnte auf unbestimmte Zeit weiter ausgeführt werden, wodurch Ressourcen mit keinem guten Ergebnis belegt werden.

+0

+1 @Stephen C: Zur Unterscheidung zwischen der tatsächlichen Beendigung der Ausführung und der bloßen Ignorierung nach einer Wartezeit. – bguiz

Verwandte Themen