使用Future的cancel()方法来取消已经提交给执行者的任务
2017-05-10 22:13
501 查看
public class Task implements Callable<String>{ @Override public String call() throws Exception { while (true) { System.out.println("Task: Test\n"); Thread.sleep(100); } } } /** * @author Administrator * 使用Future的cancel()方法来取消已经提交给执行者的任务 */ public class Main { public static void main(String[] args) { //1.创建task类 //2.实现callable接口 //3.使用Executors类的newCachedThreadPool()方法创建ThreadPoolExecutor对象 ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool(); //4.创建Task对象 Task task = new Task(); //5.使用submit()方法提交任务给执行者 System.out.println("Main Executing the Task\n"); Future<String> result = executor.submit(task); //6.使主任务睡眠2秒 try { //使用timeUnit类将参数单位设置为秒 TimeUnit.SECONDS.sleep(2); } catch (Exception e) { e.printStackTrace(); } //7.使用通过submit()方法返回的Future对象result的cancel()方法, //取消任务的执行。传入true值作为cancel方法的参数。 System.out.println("Main:Canceling the Task\n"); result.cancel(true); //8.将isCancelled()方法和isDone()的调用结果写入控制台,验证任务已取消,已完成 System.out.printf("Main:Canceled:%s\n",result.isCancelled()); System.out.printf("Main:Done:%s\n",result.isDone()); //9.使用shutdown()方法结束执行者,写入信息(到控制台),表明程序结束 executor.shutdown(); System.out.println("Main:The executor has finished"); /** * 那么cancel是如何工作的呢? * * 当你想要取消你已提交给执行者的任务,使用Future接口的cancel()方法。 * 根据cancel()方法参数和任务的状态不同,这个方法的行为将不同: * 1、如果这个任务已经完成或之前的已经被取消或由于其他原因不能被取消, * 那么这个方法将会返回false并且这个任务不会被取消。 * 2、如果这个任务正在等待执行者获取执行它的线程,那么这个任务将被取消而且不会开始他的执行。 * 如果这个任务已经正在运行,则视方法的参数情况而定。 * cancel()方法接收一个Boolean值参数。 * 如果参数为true并且任务正在运行,那么这个任务将被取消。 * 如果参数为false并且任务正在运行,那么这个任务将不会被取消。 */ } }
来自今日头条:风吹走了乌云
感谢分享
相关文章推荐
- Future接口的cancel方法 无法正常取消正在执行的线程
- linux 使用crontab添加定时任务,日志显示已经执行但是任务没有成功调用解决方法
- 在使用windows调用Hadoop 错误 /bin/bash: line 0: fg: no job control一般解决方法[将windows中的任务提交到linux中出错]
- java自定义任务类定时执行任务示例 callable和future接口使用方法
- java自定义任务类定时执行任务示例 callable和future接口使用方法
- 处理文本替换这项任务时使用过的一些方法 有好的有烂的 也有让人哭笑不得的 给自己留个念
- 使用JS遍历GridView里的TextBox,并判断.提交前调用JS方法
- 使用Swing Worker线程 --执行后台任务的新方法
- 在同一窗体中使用PHP来处理多个提交任务
- 在同一窗体中使用PHP来处理多个提交任务
- ajax使用POST方法提交表单
- 延迟工作任务的使用方法
- 在同一窗体中使用PHP来处理多个提交任务
- 访问共享目录,取消默认使用Guest帐号登录的解决方法
- 使用SqlBulkCopy对象进行大容量复制数据出现Datardader已经存在的错误的解决方法
- c#使用webBrowser,控制页面、提交表单的两种方法
- 使用Javascript同时提交多个Web表单的方法
- c#使用webBrowser,控制页面、提交表单的两种方法
- 使用Swing Worker线程 --执行后台任务的新方法
- 使用webBrowser 提交表单,控制页面的两种方法