How to catch RejectedExecutionException when using Scala futures?

executorservice, futuretask, scala

Solution

It must be handled by RejectedExecutionHandler. Either `java.util.concurrent.ThreadPoolExecutor.DiscardPolicy` or by your custom implementation.

This executor silently passes over RejectedExecutionException:

val executorService = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue[Runnable], Executors.defaultThreadFactory, new DiscardPolicy)

Problem

Where should I catch RejectedExecutionExceptions when shutting down the executor ? I tried: ``` future { Option(reader.readLine) } onComplete { case Success(v) => case Failure(e) => e match { case ree: RejectedExecutionException => // doesn't work } ``` and : ``` try { future { Option(reader.readLine) } onComplete { ... } } catch { case ree: RejectedExecutionException => // doesn't work } ``` also doesn't work. Still getting : ``` Exception in thread "pool-99-thread-1" java.util.concurrent.RejectedExecutionException at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1768) at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658) at scala.concurrent.impl.ExecutionContextImpl.execute(ExecutionContextImpl.scala:105) at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:37) at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:133) at scala.concurrent.Promise$class.complete(Promise.scala:55) at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:58) at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:23) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) ```

Original source