我们平时接触到的多线程Thread,Runnable,这两种方式不能返回线程执行后的结果。
Callable和Future,前者产生结果,后者拿到结果。
public class GreyStartServlet extends HttpServlet {
@Override
public void init() throws ServletException {
FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
@Override
public String call() throws Exception {
start(); // 使用另一个线程来执行该方法,会避免占用Tomcat的启动时间
return "Collection Completed";
}
});
new Thread(task).start();
}
// 希望Tomcat启动结束后执行的方法
private static void start() throws Exception {
Thread.sleep(1000);