我只是在探索java.util.concurrent包。

我学到类’Future’有一个方法boolean cancel(boolean mayInterruptIfRunning)

请附上我写的测试代码

package com.java.util.concurrent;

import java.util.concurrent.Callable;

import java.util.concurrent.FutureTask;

import java.util.concurrent.ScheduledFuture;

import java.util.concurrent.ScheduledThreadPoolExecutor;

public class FutureTester {

/**

* @param args

* @throws InterruptedException

*/

public static void main(String[] args) throws InterruptedException {

// TODO Auto-generated method stub

int poolCnt = 1;

Callable numberPrinter = null;

ScheduledThreadPoolExecutor schPool = new ScheduledThreadPoolExecutor(

poolCnt);

ScheduledFuture[] numPrinterFutures = new ScheduledFuture[poolCnt];

FutureTask[] futureTask = new FutureTask[poolCnt];

for (int i = 0; i < poolCnt; i++) {

numberPrinter = new NumberPrinter();

futureTask[i] = new FutureTask(numberPrinter);

/*

* numPrinterFutures[i] = (ScheduledFuture) schPool

* .schedule(futureTask[i], 0, TimeUnit.MILLISECONDS);

*/

numPrinterFutures[i] = (ScheduledFuture) schPool

.submit(futureTask[i]);

}

//Thread.sleep(30);

if (numPrinterFutures.length > 0) {

System.out.println("Task completed ? "

+ numPrinterFutures[0].isDone());

System.out.println("Task cancelled ? "

+ numPrinterFutures[0].cancel(true));

System.out.println("Is task cancelled ? "

+ numPrinterFutures[0].isCancelled());

}

}

}

class NumberPrinter implements Callable {

private int counter = 10;

@Override

public NumberPrinter call() throws Exception {

// TODO Auto-generated method stub

while (counter > 0) {

if (Thread.interrupted()) {/*OUCH !!!*/

return null;

}

System.out.println("counter = " + (counter--));

}

return this;

}

}

在本来,我假设取消一个任务也会停止运行的线程的执行(“OUCH”部分不包括在内)。但是我得到的输出如下:

counter = 10

Task completed ? false

counter = 9

Task cancelled ? true

counter = 8

Is task cancelled ? true

counter = 7

counter = 6

counter = 5

counter = 4

counter = 3

counter = 2

counter = 1

在进一步阅读stackoverflow本身,据说

>“取消”方法只能停止“未启动”作业(与方法的api描述相矛盾)

>取消方法只是中断正在运行的线程

必须从run()方法返回

因此,我包含了’OUCH’部分 – 一个循环检查中断;输出如下:

Task completed ? false

counter = 10

Task cancelled ? true

Is task cancelled ? true

题 :

如果应该写一些类似于“OUCH”部分的东西来停止运行的线程,那么取消方法的实用程序/值是多少。如果线程无法通过取消停止,那么如何在FutureTask中包装Callable?我俯瞰的是什么设计/概念/逻辑部分?

java cancel_java – Future.cancel(boolean)方法的实用程序相关推荐

  1. java cancel_Java RunnableFuture.cancel方法代码示例

    import java.util.concurrent.RunnableFuture; //导入方法依赖的package包/类 @Test public void testSnapshotAsyncC ...

  2. Java使用Future设置方法超时

    1.使用线程包 java.util.concurrent.Future 2.Future代表一个异步计算的结果. 它提供了方法来检查是否计算已经完成,还是正在计算而处于等待状态,并且也提供了获取计算结 ...

  3. java中Future的使用

    文章目录 创建Future 从Future获取结果 取消Future 多线程环境中运行 java中Future的使用 Future是java 1.5引入的一个interface,可以方便的用于异步结果 ...

  4. java.io.File.setExecutable(boolean executable) 方法来设置所有者对于此抽象路径名执行权限。

    java.io.File.setExecutable(boolean executable) 方法来设置所有者对于此抽象路径名执行权限. 声明 以下是 java.io.File.setExecutab ...

  5. timer cancel_Java Timer cancel()方法与示例

    timer cancel 计时器类cancel()方法 (Timer Class cancel() method) cancel() method is available in java.util ...

  6. 彻底理解Java的Future模式

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34173549/article/details/81074477 先上一个场景:假如你突然想做 ...

  7. JAVA并发-Future/CompletableFuture

    文章目录 一.Future 1. 什么是Future 2. future如何使用 2.1 FutureTask 工具类 3. Future 接口的局限性 二.CompletableFuture 1. ...

  8. JAVA 拾遗 --Future 模式与 Promise 模式

    JAVA 拾遗 --Future 模式与 Promise 模式 写这篇文章的动机,是缘起于微信闲聊群的一场讨论,粗略整理下,主要涉及了以下几个具体的问题: 同步,异步,阻塞,非阻塞的关联及区别. JA ...

  9. 【小家java】一个例子让就能你彻底理解Java的Future模式,Future类的设计思想

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

最新文章

  1. 从此不再惧怕URI编码:JavaScript及C# URI编码详解
  2. Centos搭建SVN服务器及配置文件
  3. easyExcel实现Excel导出功能
  4. 修改页面后获得flag_逆向基础题五:获取Flag
  5. 性能飙升160%!阿里云发布第七代ECS、云原生数据库PolarDB-X等重磅新品 | 凌云时刻...
  6. 在实战中学习项目管理 --专栏《项目管理实战20讲》学习总结
  7. 灰色理论 光滑度处理 matlab,基于灰色理论的电子设备寿命预测研究
  8. 2021腾讯广告大赛学习总结
  9. android 多渠道覆盖,Android多渠道包
  10. 本命年第三季度阶段反思
  11. 亲戚关系关系算法java程序_亲戚换算(亲戚称谓计算器)
  12. ExtJS 前端 日期数据格式转化
  13. Windows中的环境变量一览
  14. 牛顿-欧拉迭代动力学算法
  15. Cannot enhance @Configuration bean definition ‘dataSourceConfig‘ since its singleton instanc .......
  16. 苹果id登录_英雄联盟手游是用苹果ID好还是拳头好 账号选择建议
  17. TPS62240DDCR同步降压DC-DC转换器
  18. Python--面向对象进阶
  19. 计算机安装Hp1005打印机,hp1005打印机驱动 (64)
  20. 用51单片机驱动蜂鸣器

热门文章

  1. 使用Promise链式调用解决多个异步回调的问题
  2. thinkphp5(tp5)中success跳转页面和弹窗问题解决
  3. 字符串类型日期时间转换为Date类型解析转换异常java.text.ParseException: Unparseable date: “2019-09-27T18:31:31+08:00”
  4. [Git]解决Permission denied, please try again问题
  5. 解决:百度编辑器UEditor,怎么将图片保存到图片服务器,或者上传到ftp服务器的问题(如果你正在用UE,这篇文章值得你看下)
  6. 如何使用cURL一次测量请求和响应时间?
  7. 在razor视图引擎中转义@字符
  8. linux查看绑定ipv6的端口号,[原创]如何在windows和linux绑定IPV6
  9. Python基础-高级变量类型
  10. vscode jupyter补全_Cern ROOT 在jupyter里的使用