Spring中 Async註解實現非同步

2021-09-10 17:12:19 字數 1832 閱讀 5612

簡單介紹

spring為任務排程與非同步方法執行提供了註解支援。通過在方法上設定@async註解,可使得方法被非同步呼叫。也就是說呼叫者會在呼叫時立即返回,而被呼叫方法的實際執行是交給spring的taskexecutor來完成。

@async註解的開啟

如果是在springboot專案中使用的話,則更加簡單。只需要在啟動類上面加乙個註解:@enableasync即可,如:

**實現

@enableasync //開啟非同步呼叫

public static void main(string args) }

接下來我們要進入例項部分,我通過乙個聊天對話的demo來介紹。

呼叫方法依次為1,2,3。現在我想實現的是如下場景:

(1)a:你愛我嗎?

(3)a:你不回我,肯定不愛我,分手吧!

(2)b:當然愛你!(這裡假設有延遲,導致訊息不及時,a沒有收到)

如果這裡不用非同步實現的話,在3之前一定會等到2完成,所以最終導致對話是:

(1)a:你愛我嗎?

(2)b:當然愛你!(沒有延遲的情況下)

(3)a:你不回我,肯定不愛我,分手吧!

package com.example.demo.test_demo;

import org.springframework.scheduling.annotation.async;

import org.springframework.stereotype.component;

@component

public class chattest

public void chat2() catch (interruptedexception e)

}public void chat3()

}

package com.example.demo.controller;

import com.example.demo.test_demo.chattest;

import org.springframework.beans.factory.annotation.autowired;

import org.springframework.web.bind.annotation.restcontroller;

@restcontroller

public class chatcontroller

}

執行結果如下:

可以看到我們的目的還沒有達到,現在我們在chat2方法上面加上@async註解,

執行一下,結果如下:

可以看出,非同步生效了,

在呼叫方法3的時候,還沒有等到方法2執行結束便執行了3。所以才能達到我們最終的情境。

總結其實在我們實際應用中,大多數方法都是用同步的。但是在處理與第三方系統互動的時候,容易造成響應遲緩的情況,之前大部分都是使用多執行緒來完成此類任務,其實,在spring 3.x之後,就已經內建了@async來完美解決這個問題。所以本篇的這個教程還是相當實用的~~~~

Spring非同步方法註解 Async

spring 配置檔案增加以下配置 注意點 在同乙個類中 乙個方法呼叫另外乙個有註解 比如 async,transational 的方法,註解是不會生效的。在呼叫 async方法的類後面新增註解 enableasync 在被呼叫的方法增加 async註解 呼叫和被呼叫,不能在乙個類裡面定義,要分開定...

Spring中的 Async註解 非同步任務處理

在開發中,我們往往有一些特殊的需求,例如log 郵件 使用者op的記錄 來訪者資訊的記錄等等。如果將這些操作放在他自己的執行緒中執行,會不會對程式造成阻塞呢?當高併發的情況下,任務的實時性還存在麼?spring中為我們提供了 async註解,非同步的去處理。那如何去理解呢?如果乙個方法上加了 asy...

spring註解之 Async小測試

這個註解看著async應該可以猜測用途,那就是非同步。這個註解是用來將某個被標註的方法給弄成非同步的效果,達到new thread的作用,博主也趕緊拿來了 測試。非同步我最先是在js學習時,ajax提交那裡第一次接觸,有乙個async屬性,來設定這個ajax是非同步還是同步。如下偽 所示 funct...