gpt4 book ai didi

Java 从 ExecutorService 设置回调

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:22 24 4
gpt4 key购买 nike

我有一个 fixedThreadPool,我用它来运行一堆工作线程,以实现具有多个组件的任务的并行执行。

当所有线程都完成后,我使用方法 (getResult) 检索它们的结果(非常大)并将它们写入文件。

最终,为了节省内存并能够看到中间结果,我希望每个线程在完成执行后立即将其结果写入文件,然后释放内存。

通常,我会将实现该效果的代码添加到 run() 方法的末尾。然而,此类中的某些其他对象也调用这些线程,但不希望它们将结果写入文件 - 而是使用它们的结果执行其他计算,这些计算最终会写入文件。

所以,我想知道是否可以使用 ExecutorService 将回调函数附加到线程完成事件。这样,我可以立即检索其结果并释放该场景中的内存,但不会在其他场景中使用这些线程时破坏代码。

这样的事情可能吗?

最佳答案

如果可以选择使用 Google Guava,您可以使用 ListenableFuture界面如下:

  1. 转换 ExecutorServiceListeningExecutorService通过MoreExecutors.listeningDecorator(existingExecutorService)
  2. submit(Callable<V>) ListeningExecutorService的方法|已缩小以返回 ListenableFuture , 这是 Future 的子接口(interface).
  3. ListenableFuture有一个 addListener()方法,以便您可以注册一个回调,以便在未来完成时运行。

关于Java 从 ExecutorService 设置回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13116192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com