我得到了一些代码,如果我只使用初始化声明,如
private static ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
这会给我一个java.util.concurrent.RejectedExecutionException
executor.scheduleWithFixedDelay(runnable, 0, 2000, TimeUnit.MILLISECONDS);
但是如果我在使用
之前再次初始化executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleWithFixedDelay(runnable, 0, 2000, TimeUnit.MILLISECONDS);
一切正常。这是为什么?我发现的所有示例都不会在每次调度之前执行SingleThreadExecutor。我认为这只是设置池大小。它应该在声明期间进行初始化吗?!我很困惑:)谢谢
答案 0 :(得分:1)
如果在您尝试提交要运行的新作业时关闭了executor
,则会抛出RejectedExecutionException。您的executor
变量声明为static
,这意味着该类的所有实例将共享同一个变量。您的类的一个实例是否可能正在关闭执行程序,然后该类的另一个实例正在尝试安排新作业?
答案 1 :(得分:1)
两件事。
shutdown
。答案 2 :(得分:0)
没关系,这是一次关机-.-我预计当没有任务尚未运行时,终止是真的 - 感谢浪费你的时间给我:p