作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我犯了以下错误:
Executors.newFixedThreadThreadPool
来创建一个线程池Callable
对象的列表,这样call
方法会依次尝试在同一个线程池 上启动任务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/
我是一名优秀的程序员,十分优秀!