gpt4 book ai didi

java - 柜台忙碌等待

转载 作者:行者123 更新时间:2023-12-02 09:34:00 25 4
gpt4 key购买 nike

要实现 AsynchronousFileChannel 的正常终止,我必须等待所有提交的任务完成执行,然后再调用其 close() 方法。由于 Javadoc 中概述的 close() 方法要求,我无法关闭并等待底层执行程序终止。

因此,我尝试执行以下操作,但我不知道如何正确实现它。

线程 1、3、4、...

counter.increment();
// Schedule task

主题 2(由执行器服务管理)

// Task completed
counter.decrement();

主题 1(将来的某个时候)

while (!counter.isZero()) {
// Wait
}
// Proceed

如果可能,应接受等待期间到达的任务。后续任务应该被丢弃,可能会触发一些逻辑。

<小时/>

Future 放入 BlockingQueue 中会有些过分,因为在这种情况下,计算排队任务和正在运行的任务就足够了。

我应该使用java.util.concurrent包中的哪个类?

最佳答案

我还没有研究您关于 close() 方法的断言,但您可以使用信号量创建一种按需锁定的网关:

final Semaphore gate = new Semaphore(Integer.MAX_VALUE);

void submit() {
if (gate.tryAcquire()) {
try {
// submit
} finally {
gate.release();
}
}
}

void shutdown() throws InterruptedException {
gate.acquire(Integer.MAX_VALUE);
// shutdown
}

关于java - 柜台忙碌等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57699226/

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