i got some code and if I only use the declaration with initialization as in

private static ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();

this will throw me a java.util.concurrent.RejectedExecutionException on

executor.scheduleWithFixedDelay(runnable, 0, 2000, TimeUnit.MILLISECONDS);

but if I initialize again before as with

executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleWithFixedDelay(runnable, 0, 2000, TimeUnit.MILLISECONDS);

everything runs normal. Why is that? All examples I found do not execute the SingleThreadExecutor every time before scheduling. I thought it's just to set the pool size. And it should be working being intialized during declaration?! I'm confused :) Thanks

有帮助吗?

解决方案

An executor will throw RejectedExecutionException if it has been shut down when you try to submit a new job for it to run. Your executor variable is declared static, which means all instances of the class will share the same variable. Is it possible that one instance of your class is shutting down the executor, and then another instance of the class is trying to schedule a new job?

其他提示

Two things.

  1. Avoid declaring anything static that isn't final.
  2. It was probably shutdown at some point.

nevermind, it was a shutdown -.- i expected isTerminated to be true when no task was yet run -.- thanks for wasting your time for me :p

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top