您的代码不会死锁-下面是:
public class ThreadDeadlock {
...
public static void main(String [] args ) throws Exception {
ThreadDeadlock td = new ThreadDeadlock();
ThreadDeadlock.RenderPageTask rpt = td.new RenderPageTask();
Future<String> f = td.exec.submit(rpt);
System.out.println(f.get());
td.exec.shutdown();
}
}
当第一个任务等待以下任务的结果时,如果您向单线程执行器提交多个并发任务,就会发生这种情况。它不会死锁
Executors.newFixedThreadPool(2)
因为
LoadFileTask
S是独立的,可以在使用另一个线程时共享一个线程
RenderPageTask
.
此示例的要点是,如果将相互依赖的任务提交给
ExecutorService
您应该确保线程池的容量足以以所需的并行级别执行它们。