Ofe*_*Ron 30 java concurrency multithreading executorservice
使用ExecutorService返回的时Executors.newSingleThreadExecutor(),如何中断它?
eri*_*son 38
为了做到这一点,你需要submit()一个任务ExecutorService,而不是调用execute().执行此操作时,将Future返回一个可用于操作计划任务的a.特别是,您可以调用cancel(true)关联Future来中断当前正在执行的任务(如果任务尚未开始运行,则完全跳过执行).
顺便说一句,返回的对象Executors.newSingleThreadExecutor()实际上是一个ExecutorService.
中断执行程序的内部托管线程的另一种方法是在上调用shutdownNow(..)方法ExecutorService。但是请注意,与@erickson的解决方案相反,这将导致整体ThreadPoolExecutor不适合进一步使用。
我发现这种方法在ExecutorService不再需要的情况下特别有用,并且在其他Future情况下不需要在实例上保留制表符(这种情况的主要示例exit(..)是您的应用程序的方法)。
来自ExecutorService#shutdownNow(..)javadocs的相关信息:
尝试停止所有正在执行的任务,暂停正在等待的任务的处理,并返回正在等待执行的任务的列表。
除了尽最大努力尝试停止处理正在执行的任务之外,没有任何保证。例如,典型的实现将通过Thread.interrupt取消,因此任何无法响应中断的任务都可能永远不会终止。
| 归档时间: |
|
| 查看次数: |
23966 次 |
| 最近记录: |