gpt4 book ai didi

java - 创建一个 Java 完成对象,以便消费者可以等待这些对象的逻辑组合

转载 作者:行者123 更新时间:2023-11-30 04:32:34 26 4
gpt4 key购买 nike

我正在开发一个可编写脚本的对象模型,其中包括用于异步计算的完成对象,以便最终用户脚本可以等待完成对象的逻辑组合。问题是,如果我通过 wait()notify()/notifyAll() 使用内置监视器对象,则 there's no mechanism for waiting for multiple objects ;如果我使用CountDownLatch目前尚不清楚如何组合多个对象。

我想要这样的东西:

/** object representing the state of completion of an operation
* which is initially false, then becomes true when the operation completes */
interface Completion
{
/** returns whether the operation is complete */
public boolean isDone();
/** waits until the operation is complete */
public void await() throws InterruptedException;
}

class SomeObject
{
public Completion startLengthyOperation() { ... }
}

class Completions
{
public Completion or(Completion ...objects);
public Completion and(Completion ...objects);
}

以便脚本或最终应用程序可以执行此操作:

SomeObject obj1, obj2, obj3;
... /* assign obj1,2,3 */
Completion c1 = obj1.startLengthOperation();
Completion c2 = obj2.startLengthOperation();
Completion c3 = obj3.startLengthOperation();
Completion anyOf = Completions.or(c1,c2,c3);
Completion allOf = Completions.and(c1,c2,c3);
anyOf.await(); // wait for any of the 3 to be finished
... // do something
allOf.await(); // wait for all of the 3 to be finished
... // do something else

如果我使用 CountDownLatch 实现,and() 情况很容易处理——我只需按任何顺序等待所有这些。但是我该如何处理 or() 情况呢?

最佳答案

听起来像Guava's ListenableFuture ,或者至少像你应该适应一些想法。关键点是能够添加监听器来完成某件事。此时,实现相当简单:您只需创建一个 Completion 对象并向每个目标 Completion 添加监听器以标记 完成 已完成。

关于java - 创建一个 Java 完成对象,以便消费者可以等待这些对象的逻辑组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14299496/

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