“
Java Concurrency in Practice”一书中的代码清单8.1
为什么代码会死锁?是因为main()中的rpt.call与Executors中的rpt.call基本相同吗?
即使我使用10个线程来执行exec = Executors.newFixedThreadPool(10);它仍然僵局?
public class ThreadDeadlock {
ExecutorService exec = Executors.newSingleThreadExecutor();
public class RenderPageTask implements Callable {
public String call() throws Exception {
Future header, footer;
header = exec.submit(new LoadFileTask("header.html"));
footer = exec.submit(new LoadFileTask("footer.html"));
String page = renderBody();
// Will deadlock -- task waiting for result of subtask
return header.get() + page + footer.get();
}
}
public static void main(String [] args ) throws Exception {
ThreadDeadlock td = new ThreadDeadlock();
ThreadDeadlock.RenderPageTask rpt = td.new RenderPageTask();
rpt.call();
}
}