中断并行流执行

2024-02-14

考虑这段代码:

Thread thread = new Thread(() -> tasks.parallelStream().forEach(Runnable::run));

任务是应并行执行的 Runnable 列表。 当我们启动这个线程并开始执行时,根据一些计算,我们需要中断(取消)所有这些任务。

中断线程只会停止其中一个异常。我们如何对待别人?或者也许 Streams 不应该这样使用?或者你知道更好的解决方案?


您可以使用ForkJoinPool中断线程:

@Test
public void testInterruptParallelStream() throws Exception {
    final AtomicReference<InterruptedException> exc = new AtomicReference<>();

    final ForkJoinPool forkJoinPool = new ForkJoinPool(4);
    // use the pool with a parallel stream to execute some tasks
    forkJoinPool.submit(() -> {
        Stream.generate(Object::new).parallel().forEach(obj -> {
            synchronized (obj) {
                try {
                    // task that is blocking
                    obj.wait();
                } catch (final InterruptedException e) {
                    exc.set(e);
                }
            }
        });
    });

    // wait until the stream got started
    Threads.sleep(500);
    // now we want to interrupt the task execution
    forkJoinPool.shutdownNow();
    // wait for the interrupt to occur
    Threads.sleep(500);
    // check that we really got an interruption in the parallel stream threads
    assertTrue(exc.get() instanceof InterruptedException);
}

工作线程确实会被中断,从而终止阻塞操作。您也可以致电shutdown()Consumer.

请注意,这些睡眠可能不会针对适当的单元测试进行调整,您可能有更好的想法,只需在必要时等待即可。但这足以表明它正在发挥作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

中断并行流执行 的相关文章

  • 易失性变量的读-修改-写操作如何保证线程安全

    我正在阅读 JCIP 但无法理解 3 3 1 中的以下声明 只要您可以确保仅从单个线程写入易失性变量 对共享易失性变量执行读取 修改 写入操作就是安全的 在这种情况下 您将修改限制在单个线程中以防止竞争条件 并且易失性变量的可见性保证可确保
  • 在 .NET 4.0 中将任务与 Parallel.Foreach 一起使用

    我开始尝试向 Windows 窗体添加一个进度条 以更新 Parallel Foreach 循环中运行的代码的进度 为此 UI 线程必须可用于更新进度条 我使用 Task 来运行 Parallel Foreach 循环 以允许 UI 线程更
  • 不支持的major.minor版本52.0错误[重复]

    这个问题在这里已经有答案了 我有在 JDK 1 8 上编译的代码 我创建了 war 文件并将其部署在运行 JRE 1 8 的 Ubuntu 服务器中的 Tomcat8 上 我打开主页的时候出现这个错误 java lang Unsupport
  • 如何在 bash 脚本中使用并行编程/多线程?

    这是我的脚本 bin bash script to loop through directories to merge fastq files sourcedir path to source destdir path to dest fo
  • 使用 .Net HttpListener 进行多线程

    我有一个听众 listener new HttpListener listener Prefixes Add http 8077 listener Start listenerThread new Thread HandleRequests
  • 在使用 stop_token 等待条件变量_any 时是否需要拥有锁来请求停止?

    在等待条件变量时 更改谓词状态的线程必须拥有锁 因此在唤醒期间不会错过更新 根据文档 这是必要的 即使在使用原子变量时也是如此 不过我不确定是否request stop 已经正确处理了 那么问题是 这两个选项中哪一个是正确且符合标准的呢 j
  • 在函数中将通道作为参数传递的不同方法

    我正在阅读一些Go代码 并说了几种传递Go通道的不同方法 也许它们是相同的 但我想知道是否有任何区别 因为我无法在线找到文档 1 func serve ch lt chan interface do stuff 2 func serve c
  • Python:threading.timer不尊重间隔

    这是后续另一个问题 https stackoverflow com questions 32286049 python accept input while waiting 我现在有了一个解决方案 但由于不相关的原因 实现似乎没有正常运行
  • 在java 8 lambdas中,如何访问流中的原始对象?

    假设我有一个 A 列表 List a as 如果我想对每个 A 进行相当多的处理 并且在处理结束时 我想将结果放入 A 的另一个字段中 那么最好的方法是什么 ie as stream map a gt a getX filter x gt
  • Qt中用于线程间通信的类设计

    问题陈述 用相机跟踪物体并相应地移动相机的方位角和仰角 Process 相机获取物体的图像 处理相机的每一帧以查找物体 应该被跟踪 并将每帧中生成的信息传递给机械设备 万向节 以平移和倾斜方式移动摄像机 Design 主 Gui 在一个线程
  • C# 中的线程和 GUI 元素

    我正在尝试制作一个基本的 IRC 客户端 但我的问题是让文本显示在 RTF 框中而不出现滞后 我决定使用线程 并且我想更新线程中的 RTF 框 但我不能 因为它给了我关于 RTF 框元素不是静态的错误 有什么见解吗 如果你们想要的话我会粘贴
  • Java:BufferedReader 在 close() 上永远挂起,并且 StreamDecoder 不尊重线程中断

    我有一个 Java 程序 它启动一个由 Process 类表示的单独子进程 然后附加查看 Process 的 stdout stderr 的侦听器 在某些情况下 进程将挂起并停止取得进展 此时 TimeLimiter 将抛出 Timeout
  • 在 Python 中共享多处理内存的更好方法?

    我已经解决这个问题一周了 它变得非常令人沮丧 因为每次我实现一个更简单但相似规模的示例来说明我需要做的事情时 事实证明多重处理都会把它搞砸 它处理共享内存的方式让我感到困惑 因为它非常有限 很快就会变得无用 所以我的问题的基本描述是 我需要
  • C++ 11 相当于 java.util.ConcurrentHashMap

    我发现自己不断地编写互斥体代码 以便同步对 std unordered map 和其他容器的读 写访问 以便我可以像使用 java util concurrent 容器一样使用它们 我正要开始编写一个包装器来封装互斥体 但我宁愿使用经过良好
  • 在调用堆栈中看到大量 clr!CLR Semaphore::Wait

    我们看到很多像下面这样的调用堆栈 我可以知道什么条件 情况会发生这种情况吗 OS Thread Id 0x48654 559 Current frame ntdll NtWaitForSingleObject 0xa Child SP Re
  • 如何在给定点停止线程?

    我试图停止一些线程 阅读一些有关优雅地执行此操作的正确方法的内容 但我一定做错了什么 因为它根本不起作用 起初我尝试不使用lock with IsRunning不稳定 然后尝试使用锁 这是我所拥有的 private volatile boo
  • 并发集合和独特元素

    我有一个并发BlockingCollection具有重复的元素 如何修改它以添加或获取不同的元素 默认后备存储BlockingCollection is a ConcurrentQueue 正如其他人指出的那样 使用它来添加不同的项目相当困
  • 是什么决定了从 lambda 创建哪个函数式接口?

    请考虑这个例子 import java util function Consumer public class Example public static void main String args Example example new
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 我们可以使用 x86_64 CPU 原子在 PCI Express 上生成复合原子操作吗?

    如您所知 从2 0版本开始 PCI Express支持复合原子操作 FetchAdd Swap CAS https pcisig com sites default files specification documents ECN Ato

随机推荐

  • 为什么 Swift 给出的浮点运算结果不准确? [复制]

    这个问题在这里已经有答案了 与 C 以及 Objective C 相比 Swift 浮点运算似乎很糟糕 让我们举一个简单的例子 在C中 double output 90 100 0 Gives 0 9 float output 90 100
  • 在以下任何来源中均未找到插件 [id: 'com.android.application', version: '7.2.0', apply: false]

    请帮忙 我是 android studio 的新手 之前提出的问题中提供的解决方案都不适合我 我不断收到错误 Gradle 同步失败 在以下任何来源中均未找到插件 id com android application version 7 2
  • Robolectric 3.0测试片段

    我是机器人电动测试的新手 我正在尝试跟随this https stackoverflow com questions 29173071 how to use findviewbyid in robolectric发布测试片段 我使用以下作为
  • 如何在c++中使用getline命令?

    我正在尝试将 cout 命令转换为 c 中的 getline 命令 这是我正在尝试更改的代码 for int count 0 count lt numberOfEmployees count cout lt lt Name cin gt g
  • CakePHP 可容纳条件不限制结果?

    我正在尝试在分类列表中查找用户的杂货 这些关联是 类别 hasMany Item hasMany User 到 Grocery 我正在使用可控制行为 它不会过滤掉所有其他杂货 它基本上返回每个项目 我的控制器功能 function show
  • 在 Go 中对多个返回值进行转换/类型断言的惯用方法

    在 Go 中转换多个返回值的惯用方法是什么 您可以在一行中完成它 还是需要使用临时变量 就像我在下面的示例中所做的那样 package main import fmt func oneRet interface return Hello f
  • 野牛规格和优先顺序

    给定 Bison 规范 right TOK ADD TOK MUL 我想知道 TOK ADD 和 TOK MUL 的优先顺序是什么 另外如果我有野牛规格 left TOKMUL TOKADD left TOKDIV left TOKSUB
  • Eclipse 构建错误“未编写类文件。项目可能不一致,如果是这样,请尝试刷新此项目并构建它”

    我一直在努力解决一个非常奇怪的问题 该问题突然出现在最新版本的 Eclipse Classic 4 2 2 上 每次我尝试在 Eclipse 工作区中的任何项目 所有 Java 中创建或重构类或子类时 我都会在类的最顶部收到一条错误消息 A
  • C程序中的文件大小

    我只想借助 c 程序找到文件大小 我写了一个代码 但它给出了错误的结果 fseek fp 0 SEEK END osize ftell fp 还有其他办法吗 The stat系统调用是解决这个问题的常用方法 或者 在您的具体情况下 fsta
  • 使用 JavaScript 迭代 PDF 表单中的所有字段

    我想修改 PDF 表单中所有字段的一些属性 以响应用户单击按钮 哪个属性或方法将返回字段集合以便我可以迭代它们 如果有字段集合我还没有找到 不过 有一种方法可以迭代所有字段 The numFieldsdoc 对象的属性给出了字段的数量 ge
  • JavaScript 获取字符串的实际长度(不带实体)

    我需要确定可能包含 html 实体的字符串的长度 例如 darr 将返回长度 6 这是正确的 但我希望这些实体仅被计为 1 个字符 div darr div alert document getElementById foo innerHT
  • java中是否可以使用字符串来调用raw中的文件?

    是否可以创建一个像这样的字符串 public String pos1 bloodstone 然后在 Mediaplayer 之类的东西中使用它 Mediaplayer s1 s1 MediaPlayer create this R raw
  • 从与 SimpleCursorAdapter 绑定的 ListView 中获取所选项目

    我是 Android 开发的新手 来自 iPhone 和 Net 背景 我见过与此非常相似的问题 但没有一个涉及 SimpleCursorAdapter 我有一个基本的 ListActivity 它使用 Cursor 将 SQLite 查询
  • 无法将 DTE、项目或解决方案转换为 VCProject 和 VCCodeModel

    我试图通过代码获取有关 c 程序的一些信息 我在 EnvDTE 方面取得了一些成功 现在我需要使用 VCProject 和 VCCodeModel 并且我遇到了转换问题 希望这就是全部 在工人阶级中 我有一个DTE application
  • LINQ 和分页[重复]

    这个问题在这里已经有答案了 我们需要使用 LINQ 从数据库中获取数据 我们现在需要实现分页 我想有时我们需要获取10一次记录 当我们单击 下一步 按钮时 它将获取下一条记录10来自数据库的记录 请用代码指导我 谢谢 我总是使用以下代码 p
  • Npm 请以 root/管理员身份再次尝试使用此命令

    我一直在拼命尝试使用 node js 安装模块 但总是无法使用 npm 获取包 我以管理员身份登录 并使用 powershell cmd 和 以管理员身份运行 我也遇到了注册表问题 所以我使用了 npm setregistryhttp re
  • 查找错误 ORA-00932:数据类型不一致:预期 DATE 为 NUMBER

    当我尝试运行此查询时 出现上述错误 有人可以帮我解决这个问题吗 UPDATE CCO ORDER CREATION SET Doc Date 8 9 2013 WHERE Document Number IN 3032310739 3032
  • Linux Eclipse CDT 分析器

    我在 Linux 下使用 Eclipse CDT 请问有人可以在该环境下推荐一个好的分析器吗 我也是 C 和多线程编程的新手 任何人都可以提供一些关于如何运行多线程应用程序分析的建议 例如 寻找性能瓶颈等 Thanks 我不知道这是否是最好
  • 运行hadoop时出错

    haduser user laptop usr local hadoop bin hadoop dfs copyFromLocal tmp input user haduser input 11 12 14 14 21 00 INFO ip
  • 中断并行流执行

    考虑这段代码 Thread thread new Thread gt tasks parallelStream forEach Runnable run 任务是应并行执行的 Runnable 列表 当我们启动这个线程并开始执行时 根据一些计