多线程下的任务取消

Posted 下士闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程下的任务取消相关的知识,希望对你有一定的参考价值。

  记录如何取消一个放入到ExecutorService中的任务:采用FutureTask里面的Cancel;
  FuturTask.cancel函数将会自行将任务停掉,即占用的线程也将会释放;
  ExecutorService.shutdownNow()返回的List<Runnable>是“未执行任务列表”,不包括在执行的任务;我曾经误以为可以通过返回值进行手动设置当前运行的任务为cancel
cancel的参数mayInterrupted含义是:true,则无条件关闭在运行的任务;false则代表等待在运行任务完成后在关闭;
  ExecutorService.awaitTerminated()函数还需要好好调查一下,我发现取消任务可能会导致调用此函数会一直阻塞,而且通过isTerminated()函数来看也是false,即使所有的任务都完成或者取消;可能是因为:ExecutorService.awaitTermianted()线程阻塞掉了,无法自己通知自己导致的。应该保证用户线程和ExecutorService工作线程是两个线程。

以上是关于多线程下的任务取消的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程学习之线程的取消与中断机制

多线程之取消架构

教你如何取消GCD任务

DELPHI下的多线程程序设计

多线程2

并行的执行效率一定高于串行吗?(多线程的执行效率一定高于单线程吗?)