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