【发布时间】:2011-03-28 03:47:15
【问题描述】:
我在ScheduledExecutor 中有一个定期运行的任务。如果有一些特殊的例外我想归结为主线程,那么有什么干净的方法可以做到这一点?似乎没有办法从ScheduledFuture 捕获异常,如果我只是尝试在计划任务上抛出RuntimeException,该任务将停止并且永远不会被ScheduledExecutor 再次运行。
目前,我在主线程中只有一个公共静态成员,用于接收来自计划任务的事件,但这似乎并不理想。有什么推荐的读物给我看或有什么想法吗?
编辑:抱歉,请允许我举个例子:
public class TestScheduledFuture {
public static void main(String[] args) {
ScheduledExecutorService taskScheduler = Executors.newSingleThreadScheduledExecutor();
ScheduledFuture<?> scheduledFuture = taskScheduler.scheduleAtFixedRate(new TestScheduledTask(),2,2, TimeUnit.SECONDS);
}
}
我的目标是,如果我在 TestScheduledTask() 中遇到 RuntimeException,只需在 main() 中抛出 RuntimeException()。
现在,我在主类中有一个公共静态并发队列,我将异常添加到计划线程中。在 main() 中周期性地,我只是轮询队列并对队列中的任何异常做出反应。有没有更好的方法来做到这一点?
【问题讨论】:
-
你是如何向调度器提交任务的?
-
另外,“主线程”是什么意思。这是什么类型的应用程序?
-
您将如何处理异常?
标签: java multithreading