2015-02-23 79 views
0

我尝试摆脱java调度器。我正在使用ScheduleExecuterService并将ScheduleFuture对象保存在Hashtable中以便稍后访问。但我怎么能从ScheduleFuture对象检索runnableClass?Java:ScheduleFuture getClass并在下次运行时获取信息?

第二个问题:我想知道runnableClass何时会运行下一个?但我没有找到一个功能。

这是我的代码:

private Hashtable<String,ScheduledFuture<?>> scheduled; 

...

String id = "RUNID";  
    MyScheduledRunnable runnableClass = new MyScheduledRunnable(log) 
    ScheduledFuture<?> s = scheduledExecutorService.scheduleAtFixedRate(runnableClass, 0, 15, TimeUnit.MINUTES); 
    scheduled.put(id, s); 

... later ... 

    ScheduledFuture s = scheduled.get("RUNID"); 

如何从s获得runnableClass? 如何在下一次运行作业时获取信息?例如s.nextRun()? 或检查它是否还活着?

也许你们有些人可以帮助我!

谢谢!

回答

0

如何从s中获取runnableClass?

如果您没有明确地存储它,我不会期望这是可能的。

如何获取信息的时间将在下一次运行?例如s.nextRun()?

ScheduledFuture扩展Delayed接口,它具有getDelay(TimeUnit) method,这是我希望见到的使用,以获得时间,直到下一次运行。

或检查它是否仍然存在?

scheduleAtFixedRate的Javadoc指定未来只能通过抛出异常(你可以与get()检索)终止,通过与cancel方法(其可以使用isCancelled(),或当执行程序被终止测试被取消(这可以使用isTerminated进行测试)

+0

谢谢,如何检索异常如果有人被抛出?你有一个例子PLZ? – Mike 2015-02-24 22:09:23

+0

只要调用get()就会抛出一个ExecutionException;调用getCause就会返回原来的例外。 – 2015-02-24 22:58:57