2016-04-08 14 views
3

Ich verwende Openejb und asynchrone EJBs. Ich habe viele Futures und würde gerne wissen, ob einer auf dem Future zu viel Zeit braucht (damit ich ihn nachvollziehen und schließlich abbrechen kann). Das Problem ist, dass ich wissen muss, wie lange die Zukunft läuft, ich muss wissen wann es losgeht. Die Future-Schnittstelle lässt mich wissen, ob eine Zukunft beendet oder abgebrochen ist, aber wenn nicht, kann ich nicht wissen, ob sie läuft oder auf einen Thread im Pool wartet. Ist es möglich, den Status "Zukunft" (läuft/nicht gestartet) zu erhalten?Wissen, ob eine Zukunft gestartet wird

Dank

+0

scheint nicht, als ob 'Future' dies erlaubt. Sie könnten die Aufgabe immer zu einer Sammlung hinzufügen lassen und dann die Sammlung prüfen, um festzustellen, welche Aufgaben ausgeführt werden. –

+0

Ja, aber ich hätte gerne eine generische Lösung – jaudo

+0

Es scheint, dass dieses Flag-ähnliche System die einzige Möglichkeit ist, dieses Verhalten zu erreichen. Ihre nächste Option wäre, die "Future" -Schnittstelle zu erweitern, um die Flagge jeder Zukunft hinzuzufügen. Aber dies würde erfordern, dass Sie sich mit dem Executor herumschlagen, den Sie gerade verwenden, damit der Executor Ihnen eine Instanz Ihrer 'Future'-Implementierung mit dem Flag –

Antwort

-1

Ich glaube, Ihre Absicht 1) Holen Sie den Rückgabewert von eingereichten Aufgabe 2) mit Zukunft ist, wenn es zu lange dauert, brechen Sie es.

Wenn dies korrekt ist - warum nicht get mit Angabe des Timeout-Wertes verwenden.

+1

Weil die 'Zukunft' auf einen Thread aus dem Pool warten könnte, um befreit zu werden. Wenn Sie nach 5 Sekunden das Zeitlimit überschritten haben, können Sie immer noch nicht feststellen, ob die Aufgabe ausgeführt wurde und zu lange dauert oder ob die Aufgabe noch auf einen Thread wartet. –

+1

Das Timeout ist nicht genau das, was ich möchte. get (timeout) wird fehlschlagen, wenn die Zukunft nicht innerhalb des Timeouts beendet wird, auch wenn sie nicht gestartet wurde. Ich möchte wissen, wie lange der Thread läuft. Edit: Vince erklärte es besser als ich :) – jaudo

Verwandte Themen