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 次 |
最近记录: |