I have a ThreadPoolExecutor and I submit a task to it.
private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1)); This code submits the Runnable to the ThreadPoolExecutor.
protected void waitAndSweep(final String symbol) { runnable = new Runnable() { public void run() { /* irrelevant code */ } }; try { Future<?> self = threadPoolExecutor.submit(runnable); futures.add(self); } catch (RejectedExecutionException re) { /* this exception will be thrown when wait and sweep is called more than twice. * threadPoolExecutor can have one running task and one waiting task. */ } catch (Exception e) { logEvent(StrategyEntry.ERROR, "waitAndSweep", symbol, "Exception caught...", e); } } The following code stops the task.
protected synchronized void stop(StrategyEntry entry) throws Exception { for (Object future : futures) { ((Future<?>) future).cancel(true); } futures.clear(); threadPoolExecutor.shutdown(); } The problem here is: When I try to stop the task, I am getting following exception:
Task java.util.concurrent.FutureTask@3a475611 rejected from java.util.concurrent.ThreadPoolExecutor@216393fb[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 1]
shutdown()on this executor anywhere?Terminatedstate - that what is causing the exception.