我們平時接觸到的多線程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);
}
}