如何停止计划ScheduledExecutorService

时间:2017-12-01 15:25:55

标签: multithreading scheduledexecutorservice

我使用ScheduledExecutorService并通过单例类初始化它(ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(20);),这样我就不会每次都创建新的线程。然后我使用schedule" executorService.schedule(new Runnable(),20,TimeUnit.SECONDS)安排我的任务;

我有两个问题: 1.如何在作业结束后关闭线程。如果我在第一次执行后尝试调用shutdown方法,则会收到java.util.concurrent.RejectedExecutionException错误(因为主执行程序已关闭)。 2.一段时间后如何取消长时间运行的线程?让我们说一个请求是否被发送并且一个线程在执行中卡住了一段时间之后我应该如何取消它。

1 个答案:

答案 0 :(得分:0)

结束长时间运行的线程的最佳方法是从Runnable#run函数返回。任何中断或取消的尝试可能并不总是有效。