我讀書用SpringMVC文檔和我stucked異步部分:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-async春季異步與Callable工作和我不明白?
我創造了非常簡單的項目(春4,爪哇8)這樣的控制器如下:
@Controller
public class HomeController {
@RequestMapping("/async")
public Callable<String> async() {
logger.info("Async IN, {}", new Date());
return() -> {
Thread.sleep(5000);
return "home";
};
}
@RequestMapping("/sync")
public String sync() throws Exception {
logger.info("Sync IN, {}", new Date());
Thread.sleep(5000);
return "home";
}
}
我已經啓用了異步功能在Servlet中 - 如文檔中所述。現在我打電話要求,首先是/sync
,其次是/async
。相繼。他們全都是在醫務室內派遣的。 Spring應用程序不會等待/sync
結束,然後纔會開始處理/async
請求。請求後我會在同一時間得到回覆。
它看起來像這樣:
INFO : com.mydlarz.springtt.HomeController - Sync IN, Thu Dec 04 17:00:18 CET 2014
INFO : com.mydlarz.springtt.HomeController - Async IN, Thu Dec 04 17:00:19 CET 2014
INFO : com.mydlarz.springtt.HomeController - Async IN, Thu Dec 04 17:00:29 CET 2014
INFO : com.mydlarz.springtt.HomeController - Sync IN, Thu Dec 04 17:00:29 CET 2014
這是爲什麼?第一次SYNC後約5秒不應啓動第二個請求處理?
我可以在哪裏指定Servlet容器中的線程數? – dmydlarz 2014-12-04 16:16:41
@DariuszMydlarz沒有標準的方法來做到這一點。這取決於你的Servlet容器。 – 2014-12-04 16:17:25
@DariuszMydlarz你可以做什麼來模擬獲得備份的請求,是在每個方法的前面添加'synchronized',即'public synchronized String sync()'。但是不要將「同步」放入生產環境中。 – 2014-12-04 16:57:09