gpt4 book ai didi

java - ScheduledExecutorService 等待任务完成,挂起的任务是否堆积到最终中断主线程?

转载 作者:行者123 更新时间:2023-12-01 16:13:15 25 4
gpt4 key购买 nike

我对使用 ScheduledExecutorService 的新实现感到好奇,其中任务预计在 100 毫秒期间和 0 毫秒延迟内完成。但是,如果存在系统负载并且需要 550 毫秒,那么 ScheduledExecutorService 是否会为那些挂起的 4 个任务维护一个队列?然后在第一个完成后立即运行(0ms 延迟)。如果第二次执行需要 560 毫秒,是否会在队列中添加另外 4 个线程?

没有相关文档,或者我可能会忽略它。但我想确保此类执行的堆积会触发泄漏或溢出。

例如:下面的代码,主线程会失败吗?

    private static ScheduledExecutorService consumerThreadPool = Executors.newSingleThreadScheduledExecutor();
public static void main(String[] args) throws Exception {
consumerThreadPool.scheduleAtFixedRate(() -> performTask(), 0, 1, TimeUnit.MILLISECONDS);
}

private static void performTask () {
try {
Thread.sleep(550);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

最佳答案

如果您的任务超出了下一个计划时间,您的任务将被跳过,您可以使用 System.out.println 轻松验证并将 sleep 时间更改为 500ms 至 5000ms:

public static void main(final String[] args) throws InterruptedException, ExecutionException
{
var executor = Executors.newScheduledThreadPool(1);
var count = new AtomicInteger();

Runnable task = () -> {
String desc = "run("+((System.currentTimeMillis() / 1000) % 60)+") "+Thread.currentThread().getName()+" count "+count.incrementAndGet();
System.out.println(desc);
if(count.get() == 50)
throw new RuntimeException("I give up!");

try
{
Thread.sleep(2500);
}
catch (InterruptedException e)
{
System.out.println("Thread "+Thread.currentThread().getName()+" INTERRUPTED");
}
};
var future = executor.scheduleAtFixedRate(task, 5000, 1000, TimeUnit.MILLISECONDS);

System.out.println("Calling future.get() ...");
try {
var res = future.get();
System.out.println("future.get()="+res);
}
catch(Exception e)
{
System.err.println("There was an exception:" +e);
// Decide between "continue" or "throw e" here
// ...
}
executor.shutdownNow();
System.out.println("shutdown complete");
}

关于java - ScheduledExecutorService 等待任务完成,挂起的任务是否堆积到最终中断主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62477008/

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