ExecutorService workStealingPool 和取消方法

2024-03-29

您能想到为什么这段代码不起作用并且总是输出“完成”,但第二个示例可以正常工作的任何原因吗?我正在使用最新的 JDK (8u45)。



public static class MyClass implements Runnable {

        @Override
        public void run() {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ex) {
                System.out.println("Interrupted");
                return;
            }
            System.out.println("Finished");
        }

        public static void main(String[] args) {
             // spot the difference ->
             ExecutorService executorService = Executors.newWorkStealingPool(4);
             Future future = executorService.submit(new MyClass());
             Thread.sleep(100);
             future.cancel(true);
        }
    }
  

下面的例子可以完美地工作:



public static class MyClass implements Runnable {

        @Override
        public void run() {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ex) {
                System.out.println("Interrupted");
                return;
            }
            System.out.println("Finished");
        }

        public static void main(String[] args) {
             ExecutorService executorService = Executors.newSingleThreadExecutor();
             Future future = executorService.submit(new MyClass());
             Thread.sleep(100);
             future.cancel(true);
        }
    }
  

编辑:添加返回和更新的睡眠时间和另一个示例。


这比我最初想象的要简单。问题是work-stealing-pool在内部使用ForkJoinPool,而ForkJoinTask不支持cancel(true),因此在任务启动后不可能取消任务。

请参阅 javadoc 文档(http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinTask.html http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinTask.html):

   mayInterruptIfRunning - this value has no effect in the default implementation 
   because interrupts are not used to control cancellation.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ExecutorService workStealingPool 和取消方法 的相关文章

随机推荐

  • 用于获取访问次数最少的目录日期/时间的 shell 命令

    find 命令中是否有可用的排序选项来获取访问日期 时间最少的目录 find type d printf A p n sort n tail n 1 cut d f 2 如果您喜欢不带前导路径的文件名 请替换 p by f
  • 如何在Picasso中清除缓存并重新加载图像?

    我在用Picasso在我的应用程序中加载图像 但我面临一个问题 我的图像URL是相同的 但图像正在改变backend调用相同的 URL 但是Picasso加载保存在缓存中的相同图像 现在我想清除该图像的缓存并再次重新加载图像 我尝试过的我搜
  • 在 Windows 10 上使用 mingw 进行 CMake:检测 CXX 编译器 ABI 信息 - 失败

    我想使用 cmake 在 Windows 10 上创建 MinGW Makefile 我已经安装了 mingw 并且可以毫无问题地使用 mingw32 make 和 g 命令 测试项目是一个超级简单的CMakeLists txt文件 cma
  • 版本控制压缩文件(docx、odt)

    有些格式实际上是伪装的 zip 文件 例如docx 或 odt 如果我将它们直接存储在版本控制中 它们将被作为二进制文件处理 我理想的解决方案是 有一个钩子可以创建一个foo docx 每个目录foo docx提交之前的文件 将所有文件解压
  • C中的多态性

    我正在用 C 语言设计一个程序来操作几何图形 如果每种类型的图形都可以由相同的基元操作 那将非常方便 我怎样才能在C中做到这一点 通常使用函数指针来完成此操作 换句话说 保存数据的简单结构and指向操作该数据的函数的指针 在 Bjarne
  • 恢复 Typescript 定义 Nuget 包

    我目前正在开发一个新项目 该项目将 Typescript 用于所有客户端代码 我使用许多纯 JavaScript 库来让它们与我的 Typescript 一起使用 我使用 Nuget 通过以下包管理器命令提取 d ts 文件 包管理器命令示
  • UserManager SendEmailAsync 未发送电子邮件

    我正在使用以下代码尝试异步发送电子邮件 但没有发送电子邮件 并且我不确定哪里做错了 我还在 web config 中添加了电子邮件协议的第二段代码 发送电子邮件异步代码 await UserManager SendEmailAsync us
  • Android 上的 AWS CloudWatch Log

    我正在尝试在 Android 应用程序中使用 AWS CloudWatch Log 我对 aws client 有以下配置 val basicAWSCredentials BasicAWSCredentials Xxxxxx Yyyyyy
  • 字符串交错的动态规划问题解决方案

    我试图解决这个问题 但我放弃了 找到了下面的解决方案 尽管我不明白该解决方案是如何工作的 或者为什么它有效 任何深入的解决方案将不胜感激 问题 Given s1 s2 s3 求是否s3由交错形成s1 and s2 例如 给定 s1 aabc
  • 如何从 python 中的命名元组中获取名称?

    我创建一个像这样的命名元组 from collections import namedtuple spam namedtuple eggs x y z ham spam 1 2 3 然后我可以使用例如访问火腿的元素 gt gt gt ham
  • 禁用部分内容的 CSS

    我正在使用 Yii bootstrap 扩展 但遇到一些样式问题 因为 bootstrap css 文件影响页面的主要内容 我的主要内容是使用 OpenLayers 完成的地图 因此我在它们之间混合样式时遇到了一些问题 我尝试做一个更通用的
  • 没有 v-model 的 Vue.JS 复选框

    尝试在不使用 v model 的情况下创建复选框
  • 服务层/存储库模式

    我正在使用 EF4 的服务层 存储库 工作单元模式构建一个 MVC 应用程序 我对逻辑有点困惑 我知道重点是解耦系统 但我有点困惑 因此 MVC 控制器调用服务来填充视图模型 那么可以肯定地说 MVC 应用程序耦合到服务层吗 然后服务层调用
  • sqlite3 - 插入 - javascript 对象作为值

    使用 javascript 对象作为 sqlite3 插入的值的最简单的解决方案是什么 下面的代码不起作用 const values name John age 34 language english db run INSERT INTO
  • 为什么 lodash 在否定函数中使用 switch-case? [复制]

    这个问题在这里已经有答案了 下面的代码是源码negateLodash 中的函数 我们可以看到 当参数长度小于4时 它使用switch case而不是使用apply直接地 这段代码有什么魔力呢 它会使性能更好吗 为什么分割点是4 functi
  • 如何更改 django runserver url?

    我正在尝试更改 django 项目 url 以便想要连接到局域网中网站的用户将看到 url 而不是 localhost 8000 或 127 0 0 1 我需要将 localhost 8000 users board 更改为http exa
  • Rails Engine + Mongoid:找不到名为“default”的会话的配置

    我创建了一个 Rails Mountable 应用程序并添加了 mongoid 和 rspec gem 如果我现在尝试运行我的规范 我会收到以下错误 Mongoid Errors NoSessionConfig Problem No con
  • HTML5 本地存储和变量类型

    我正在对 HTML5 中的本地存储进行一些测试 注意我使用的是 Safari 6 0 2 因为似乎许多 Web 引擎处理它们的方法不同 如果我这样做 localStorage setItem subTotal Number 12345 I
  • JavaScript 字符串连接速度

    有人可以向我解释一下这个吗 http jsperf com string concatenation 1 2 http jsperf com string concatenation 1 2 如果你很懒 我测试了 A 和 B A var i
  • ExecutorService workStealingPool 和取消方法

    您能想到为什么这段代码不起作用并且总是输出 完成 但第二个示例可以正常工作的任何原因吗 我正在使用最新的 JDK 8u45 public static class MyClass implements Runnable Override p