對于異步方法調用,從Spring3開始提供了@Async注解,該注解可以被标在方法上,以便異步地調用該方法。調用者将在調用時立即傳回,方法的實際執行将送出給Spring TaskExecutor的任務中,由指定的線程池中的線程執行。
同步就是整個處理過程順序執行,當各個過程都執行完畢,并傳回結果。
異步調用則是隻是發送了調用的指令,調用者無需等待被調用的方法完全執行完畢;而是繼續執行下面的流程。
SimpleAsyncTaskExecutor:不是真的線程池,這個類不重用線程,預設每次調用都會建立一個新的線程。
SyncTaskExecutor:這個類沒有實作異步調用,隻是一個同步操作。隻适用于不需要多線程的地方。
ConcurrentTaskExecutor:Executor的适配類,不推薦使用。如果ThreadPoolTaskExecutor不滿足要求時,才用考慮使用這個類。
SimpleThreadPoolTaskExecutor:是Quartz的SimpleThreadPool的類。線程池同時被quartz和非quartz使用,才需要使用此類。
ThreadPoolTaskExecutor :最常使用,推薦。其實質是對java.util.concurrent.ThreadPoolExecutor的包裝
異步的方法有
最簡單的異步調用,傳回值為void
帶參數的異步調用,異步方法可以傳入參數
存在傳回值,常調用傳回Future