乐趣区

关于后端:JDK21更新内容结构化并发编程

有的时候博客内容会有变动,首发博客是最新的,其余博客地址可能会未同步, 认准https://blog.zysicyj.top

首发博客地址

文章更新打算

文章更新打算


| 453: | Structured Concurrency (Preview) |

什么是结构化并发(Structured Concurrency)?

结构化并发是一种用于简化并发编程的 API。它将在不同线程中运行的相干工作组视为一个独自的工作单元,从而简化错误处理和勾销操作,进步可靠性,并加强可察看性。

为什么须要结构化并发?

传统的并发编程模型,如ExecutorService
API,因为其无限度的并发模式,引入了复杂性和危险。这些模型没有强制执行或跟踪工作和子工作之间的关系,使得治理和察看并发工作变得艰难。结构化并发模型认为工作构造应该反映代码构造,在单线程代码中,执行总是强制施行工作和子工作的层次结构,每个子工作的生命周期绝对于其余子工作受到代码的语法块构造的管制。

结构化并发旨在打消与并发编程相干的常见危险,例如线程透露和勾销提早,并加强并发代码的可察看性。

结构化并发的实现原理

结构化并发通过引入新的 API 来实现,其中最重要的类是 StructuredTaskScopeStructuredTaskScope
封装了一组相干的工作,这些工作应该一起实现,如果任何子工作失败,则会勾销残余的子工作。

在结构化并发中,应用 StructuredTaskScope
创立一个作用域,在该作用域内能够派生出多个子工作。这些子工作将被视为整体,并且它们之间存在依赖关系。当所有子工作实现后,能够对它们进行解决,例如获取后果或抛出异样。

结构化并发的长处

  • 简化并发编程:结构化并发提供了一种更简略、更直观的形式来解决并发工作。
  • 错误处理和勾销操作:通过将相干工作组合成一个单元,结构化并发使错误处理和勾销操作更加容易和牢靠。
  • 进步可靠性:结构化并发模型打消了常见的危险,如线程透露和勾销提早,从而进步了并发代码的可靠性。
  • 加强可察看性:结构化并发模型使得察看并发工作的执行状态变得更加不便。

结构化并发的毛病

  • 预览性能:目前,结构化并发仍处于预览阶段,须要启用预览性能能力应用。

结构化并发的应用示例

上面是一个应用结构化并发的示例代码:

Response handle() throws ExecutionException, InterruptedException {try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {Supplier<String>  user  = scope.fork(() -> findUser());
        Supplier<Integer> order = scope.fork(() -> fetchOrder());

        scope.join()            
             .throwIfFailed();  

        
        return new Response(user.get(), order.get());
    }
    
}

在这个示例中,咱们创立了一个新的 StructuredTaskScope 作用域,并应用它派生了两个子工作:一个执行 findUser()
办法,另一个执行 fetchOrder() 办法。一旦两个子工作都实现,就能够应用它们的后果创立一个新的 Response 对象。

结构化并发的应用注意事项

  • 结构化并发是一个预览性能,默认状况下被禁用。要应用StructuredTaskScope API,开发人员必须启用预览性能来编译代码。
  • 应用结构化并发时,通常不间接应用 StructuredTaskScope
    类,而是应用实现敞开策略的两个子类之一。这些子类别离是 ShutdownOnFailureShutdownOnSuccess,反对当第一个子工作失败或胜利时敞开作用域的模式。
  • 运行结构化并发程序时,须要应用 --enable-preview 选项启用预览性能。

总结

结构化并发是一种用于简化并发编程的 API,它将相干工作组合成一个单元,从而简化错误处理和勾销操作,进步可靠性,并加强可察看性。通过引入 StructuredTaskScope
类和相干的子类,结构化并发提供了一种更简略、更直观的形式来解决并发工作。然而,须要留神的是,结构化并发目前仍处于预览阶段,并且须要启用预览性能能力应用。

JDK 21 将是大多数供应商的长期反对(LTS)版本。无关自上一个 LTS 版本 JDK 17 以来集成的 JEP
的残缺列表,请参阅 here.
<!– md tj.md –>

本文由 mdnice 多平台公布

退出移动版