在我的Java Web應用程序中,我有一個結束大約200封電子郵件的方法。由於電子郵件服務器延遲,整個過程大約需要7分鐘。此批量電子郵件發送必須發生在用戶操作的結果中。我當然不希望用戶在轉發到下一個版本之前必須等待很長時間,而不是說Apache無論如何都不會超時,所以我試圖實現FutureTask來讓進程在單獨的線程中運行,同時繼續其餘代碼如下:使用FutureTask進行異步程序時遇到問題
Some code;
Runnable r = (Runnable)new sendEmails(ids);
FutureTask task = new FutureTask(r, null);
Thread t = new Thread(task);
t.start();
Some more code;
但是,該應用程序仍在等待FutureTask完成,然後再繼續。我接受這樣的想法,即在繼續執行腳本的其餘部分的同時,這也不是在另一個線程中運行一些代碼的最佳方式。有更好的方法/我如何使這個工作?
這應該不會被阻止,除非您在'More some code'塊中某個地方調用'get'任務。 – yakshaver 2013-03-01 18:14:11
線程完成工作後,您是否想要執行一些操作? 「你的意思是什麼?」然而,應用程序仍然等待FutureTask在繼續之前完成?您的代碼中沒有阻止呼叫。 – 2013-03-01 18:14:48
我不打電話過去,我不需要退貨。意思是說,當我調用這段代碼時,「更多的代碼」(只是將用戶轉到頁面的調用)在Runnable完成之前不會執行。 – sgd 2013-03-01 18:49:00