首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java结构化并发

Java结构化并发
EN

Stack Overflow用户
提问于 2022-01-20 01:27:16
回答 1查看 208关注 0票数 1

结构化并发:

一个简单的原则是,当执行流分裂为多个并发流时,它们将重新加入同一个代码块。

来源

基于此,让我们假设我有如下内容:

代码语言:javascript
复制
//can replace this with Virtual thread
public static void delegateTask() {
    Thread delegator = new Thread(new TaskDeligator());
    delegator.setName("TaskDeligatorThread");
    logger.info("Creating task delegator thread....which will register listeners");
    delegator.start();
}

问题1: I创建了一个新的子线程(TaskDeligatorThread),但是没有在相同的代码块中完成/结束/重新连接,即方法delegateTask() --这是否意味着它不遵循结构化并发原则?

问题2:可能存在这样的情况: Thread1希望将一些任务委托给子线程( Thread1将创建该子线程),而Thread1不需要等待子线程的输出/完成。在这种情况下,我也不会在创建子线程的代码块中完成/end/重新加入子线程。在这种情况下,我将如何遵循结构化并发?

EN

回答 1

Stack Overflow用户

发布于 2022-01-20 01:56:58

“在同一个代码块内”这个短语有点模糊。

严格地说,您的main方法可以打开一个StructuredExecutor,并使它对整个程序中的所有代码都可用,这样您就可以使用库支持结构化并发,而不是真正使用结构化并发。(这大致类似于使用for+switch编写意大利面代码,这些代码在技术上不包含“goto”,但相当于相同的内容。)

您的两个示例都没有遵循结构化并发原则,因为它们涉及分叉任务和放弃任务。您可以通过识别真正依赖于该任务的更高级别的调用者,并让更高级别的调用者管理StructuredExecutor,从而对它们进行重新工作以遵循这一原则。或者,您可能会决定您实际上不想遵循这个原则,无论是在一般情况下还是在这些情况下。

JEP并没有详细解释结构化并发的概念,因为它的主要关注点是如何在Java中支持它。如果您想了解这个概念本身,我建议阅读它链接到的博客文章中的一篇或两篇:

(注:前者比较技术性,后者比较容易阅读。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70779792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档