gpt4 book ai didi

java - 责任链——处理多个请求

转载 作者:行者123 更新时间:2023-11-30 12:02:16 25 4
gpt4 key购买 nike

是的,这个对我来说可能有点难以解释,因为我是新手。

我的任务是使用责任链来解决其中一个问题。在我发现我必须确保我的链能够一次处理多个请求之前,我对它的理解和实现没有任何问题。

链基本上应该像这样工作:在整个链条中,有两个或多个部分能够处理同一个问题。处理一个问题需要整整一分钟。如果其中一个处理程序正忙,请求将直接转到下一个(完全跳过正忙的处理程序)。

所以我的问题是:如何一个接一个发送多个请求?

最佳答案

首先,这是责任链的专门实现。不要认为所有责任链都会这样做,因为它们不会。

也就是说,如果您想在第一个任务仍在运行时运行第二个任务,那么您需要确保的主要事情是您不会阻塞调用者(“主”)线程。我想慢速元素需要将工作转移到其他线程并有一个标志来表示它正在忙着做某事。

这是一个快速的代码草图

interface Link {
void handle(int i);
}

class SlowLink implements Link {
private final AtomicBoolean isBusy = new AtomicBoolean(false);
private final Link next;

SlowLink(Link next) { this.next = next; }

@Override
public void handle(int i) {
if (isBusy.compareAndSet(false, true)) {
new Thread(() -> handleAsync(i)).start();
}
else {
next.handle(i);
}
}

private void handleAsync(int i) {
try {
Thread.sleep(3000);
System.out.println("slow " + i);
isBusy.set(false);
}
catch (InterruptedException e) {}
}
}

class QuickLink implements Link {
@Override
public void handle(int i) {
System.out.println("quick " + i);
}
}

class Scratch {
public static void main(String[] args) throws InterruptedException {
Link chain = new SlowLink(new QuickLink());
chain.handle(5);
Thread.sleep(1000);
chain.handle(2);
}
}

关于java - 责任链——处理多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58699902/

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