gpt4 book ai didi

java - 有没有办法让 ExecutorService 递归工作?

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:38 24 4
gpt4 key购买 nike

我犯了以下错误:

  1. 调用了 Executors.newFixedThreadThreadPool 来创建一个线程池
  2. 设置Callable 对象的列表,这样call 方法会依次尝试在同一个线程池 上启动任务
  3. 使用invokeAll将它们转储到队列中

结果是执行者服务的队列死锁。

我读过的 Javadoc 似乎没有禁止这组 Activity 。我错过了什么?有没有什么方法可以自定义队列或服务,以便它可以工作?

最佳答案

我对您的问题的理解类似于以下测试用例,它按照记录的方式工作(如您所说)并且我很乐意在生产中使用它。您的示例与此有何不同?

import java.util.Date;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

class Scratch {
public static void main(String[] args) throws InterruptedException {
final ExecutorService pool = Executors.newFixedThreadPool(1);
pool.submit(new Callable<Void>() {
@Override
public Void call() throws Exception {
pool.submit(new Callable<Void>() {
@Override
public Void call() throws Exception {
System.out.println(new Date() + ": Second callable being run.");
pool.shutdown();
return null;
}
});

System.out.println(new Date() + ": First callable going to sleep...");
Thread.sleep(2000);
System.out.println(new Date() + ": First callable finished!");
return null;
}
});

pool.awaitTermination(2, TimeUnit.MINUTES);
}
}

打印类似的东西:

Mon Feb 20 01:18:00 GMT 2012: First callable going to sleep...
Mon Feb 20 01:18:02 GMT 2012: First callable finished!
Mon Feb 20 01:18:02 GMT 2012: Second callable being run.

关于java - 有没有办法让 ExecutorService 递归工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9355000/

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