2017-04-26 4 views
2

Wie kann ich die Java-Parallelitäts-API verwenden, um einen Verweis auf die Aufgabe zu erhalten, die zur Ausführung geplant ist?Erhalte einen Verweis auf die geplante Aufgabe

Ich kann etwas tun, und halten Sie den Verweis auf myRunnable:

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(); 
SimpleRunnable myRunnable = new SimpleRunnable(); 
exec.scheduleAtFixedRate(myRunnable, 0, 2, TimeUnit.SECONDS); 

Aber gibt es eine Möglichkeit, den Exekutor Service oder ScheduledFuture zu verwenden, um die Referenz zu bekommen?

This question zeigt eine Auflistung von Future Objekten und bespricht, dass sie einen Verweis auf die Aufgabe behalten, aber ich sehe keine öffentliche API-Methode, die sie aussetzt.

Antwort

0

Die zukünftige Referenz stellt das Berechnungsergebnis der asynchronen Task dar, während die Task selbst im Grunde die ausführbare Referenz ist, die Sie an die Methode scheduleAtFixedRate übergeben (im folgenden Beispiel "myRunnable").

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(); 
SimpleRunnable myRunnable = new SimpleRunnable(); 
ScheduledFuture<?> future = exec.scheduleAtFixedRate(myRunnable, 0, 2, 
TimeUnit.SECONDS); 

Ich glaube nicht, dass Sie eine Möglichkeit haben, die Runnable vom Executor selbst abzurufen. Bitte erläutern Sie, was Sie zu erreichen bereit sind und ich werde versuchen, Ihnen zu helfen.

+0

Ja, ich könnte an der Referenz für das Objekt ScheduledFuture hängen, aber ich sehe immer noch keine Möglichkeit, einen Verweis auf die Aufgabe zu erhalten. – sjgp

+0

Ich glaube nicht, dass Sie eine Möglichkeit haben, das Runnable vom Executor selbst abzurufen. Bitte erläutern Sie, was Sie zu erreichen bereit sind, und ich werde versuchen, Ihnen zu helfen. –

+0

Ich untersuche Design-Optionen für eine Anforderung, dass eine Aufgabe in regelmäßigen Abständen ausgeführt werden soll, um etwas Arbeit zu erledigen, und Informationen sammeln, wie es tut. Ein zweiter unabhängiger Prozess benötigt Zugriff auf diese Informationen. Der Zugriff muss nicht über den Executor oder die Future-API erfolgen, und ich kann eine andere Lösung entwerfen, da der Verweis auf die Task nicht als Option erscheint. Danke für deine Gedanken! – sjgp