6

我正在使用 ScheduledThreadPoolExecutor.schedule(Runnable,int,TimeUnit) 来安排实现 Runnable 的类的一些对象。

在某个时间点,我的应用程序正在关闭,我使用ScheduledThreadPoolExecutor.shutdownNow()。根据文档,它返回一个 ScheduledFuture 的列表。

我真正想做的是获取我最初计划的对象,并从中获取一些数据,然后我将输出它说它无法执行。稍后,应用程序将使用它来尝试在应用程序重新启动时执行它。

4

2 回答 2

2

获取有关提交给执行程序的对象的信息的常用方法是维护指向原始对象的指针(它们是 Callable、Runnable 等的扩展)。在您调用 shutdownNow() 并考虑到等待执行的对象返回的 Runnable 之后,您可以使用它来修剪原始对象列表并询问实际运行的对象。

于 2011-01-21T00:17:12.643 回答
2

如果您只想将信息呈现给用户,最简单的方法可能是为您安排的 s实现一个有意义的toString()方法。Runnable然后你可以简单地迭代Executor给你的列表并记录你得到的东西。

但可悲的事实是,您的原始对象会被 包裹起来Executor。然后,您需要保留Executor手动传递给的内容的列表,并Runnable在执行时让 s 从该列表中删除自己。显然,您需要为此使用线程安全列表。

于 2011-01-21T00:24:43.463 回答