SpringBoot學習之路---記錄異步任務(@Async註解)

我們在開發中,往往會碰到和多線程相關的問題。我們有時往往需要異步去解決問題,SpringBoot爲我們提供了一個註解,接下來記錄一下。


這裏假設有一個情景,編寫一個service層的代碼,需要等待3秒的時間,如果是同步的代碼的話,在此過程中,用戶只能等待3秒,期間什麼事都不能做,不管對於系統還是用戶來說,都是不好的。系統那段時間沒有做事,會浪費時間,而用戶等待過程中用戶體驗也不是很好。

這裏先編寫一個小demo代碼:

service:

@Service
public class HelloService {

    public void hello(){

        try {
            Thread.sleep(3000);
            System.out.println("處理數據...");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

這個代碼作用也是比較簡單,就是在讓系統"沉睡"3秒。接着在寫一個controller去調用它:

controller:

@RestController
public class HelloController {

    @Autowired
    private HelloService helloService;

    @GetMapping("hello")
    public String hello(){
        String hello = helloService.hello();

        return "hello world";
    }
}

我們在瀏覽器訪問該路徑時,需要等待3秒纔可以有結果。這就會像我們上文提到的一樣,我們這時就會想到用異步的方式去解決它,如果自己編寫異步代碼那挺麻煩的(當時學多線程的噩夢…),好在SpringBoot爲我們提供了一個註解(@Async),我們只需要把該註解標註在需要的方法即可。

@Async

之後,還差一步,我們是標註了異步註解,但是還要去開啓異步的相關支持,需要在主啓動類中添加

#EnableAsync //表示開啓異步的相關支持

之後再次訪問路徑,就無需等待,便可直接訪問:
在這裏插入圖片描述
這個註解平時應用場景挺多的,比如給用戶發送郵件,推送消息等等。就無需一步一步做了,可以同時執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章