我正在使用ScheduledThreadPoolExecutor.schedule(Runnable,int,TimeUnit)来安排实现Runnable的类的一些对象。
在某个时间点,我的应用程序正在关闭,我使用ScheduledThreadPoolExecutor.shutdownNow()。根据文档,它返回ScheduledFuture的列表。
我真正想要做的是获取我最初安排的对象,并从中获取一些数据,然后我将输出它说它无法执行。然后,应用程序将使用它在应用程序开始备份时尝试执行它。
答案 0 :(得分:2)
获取有关提交给执行程序的对象的信息的通常方法是维护指向原始对象的指针(可以是Callable,Runnable等的扩展)。在调用shutdownNow()之后,考虑到等待执行返回的Runnable,您可以使用它来修剪原始对象列表,只询问实际运行的对象。 / p>
答案 1 :(得分:1)
如果您只想向用户提供信息,最简单的方法可能是为toString()
您的日程安排实施有意义的Runnable
方法。然后你可以简单地迭代Executor
给你的列表并记录你得到的内容。
但令人遗憾的是是你的原始对象被Executor
包裹起来。然后,您需要手动保存传递给Executor
的内容列表,并让Runnable
在执行时从这个列表中删除。显然,您需要为此目的使用线程安全列表。