gpt4 book ai didi

java - 如何确保 ExecutorService 池已完成而不关闭它?

转载 作者:行者123 更新时间:2023-12-02 04:07:52 24 4
gpt4 key购买 nike

目前,我正在确保我的任务已经完成,然后再像这样继续:

    ExecutorService pool = Executors.newFixedThreadPool(5);

public Set<Future> EnqueueWork(StreamWrapper stream) {
Set<Future> futureObjs = new HashSet<>();
util.setData(stream);
Callable callable = util;

Future future = pool.submit(callable);
futureObjs.add(future);

pool.shutdown();
try {
pool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}

Node.sendTCP(Node.getNodeByHostname(StorageTopology.getNextPeer()), Coordinator.prepareForTransport(stream));

return futureObjs;
}

但是,由于我的套接字上有其他一些线程,可能会对 EnqueueWork 进行多次调用 - 我想确保对 .submit 的调用已在当前线程中完成,而无需关闭后续线程进入的

这可能吗?

最佳答案

您可以通过对 futureObjs 中的所有 Future 对象调用 isDone() 方法进行检查。您需要确保 isDone 在循环中被调用。在 Future 对象上调用 get() 方法是另一种选择,因为 get() 是一个阻塞调用,它只有在任务完成且结果准备好后才会返回。但是您真的想在所有任务完成后保持池打开吗?

关于java - 如何确保 ExecutorService 池已完成而不关闭它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34083675/

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