使用異步開啟新的線程Spring異步方法注解@Async


  在同一個類中,一個方法調用另外一個有注解(比如@Async,@Transational)的方法,注解是不會生效的。

  特別注意的地方:

  1.  在調用@Async方法的類后面添加注解: @EnableAsync
  2.  在被調用的方法增加@Async注解
  3.  調用和被調用, 不能在一個類里面定義, 要分開定義.
  4.  方法所屬的類的對象需要是被Spring容器所管理的,也就是指被@Controller @Service @Repository @Component這些注解的類  

 

 

  

  1. 我們不關心方法的返回值
  2. 方法的返回值為void
  3. 通過Future對象異步地獲得返回值

  Future接口的四個方法

// 取消任務 boolean cancel(boolean mayInterruptIfRunning);

// 判斷任務是否已取消 boolean isCancelled();

// 判斷任務是否已結束 boolean isDone();

// 獲得任務執行結果 get();

// 獲得任務執行結果,支持超時 get(long timeout, TimeUnit unit);

利用 Java 並發包提供的 Future 可以很容易獲得異步任務的執行結果,無論異步任務是通過線程池 ThreadPoolExecutor 執行的,還是通過手工創建子線程來執行的。Future 可以類比為現實世界里的提貨單,比如去蛋糕店訂生日蛋糕,蛋糕店都是先給你一張提貨單,你拿到提貨單之后,沒有必要一直在店里等着,可以先去干點其他事,比如看場電影;等看完電影后,基本上蛋糕也做好了,然后你就可以憑提貨單領蛋糕了。

  利用多線程可以快速將一些串行的任務並行化,從而提高性能;如果任務之間有依賴關系,比如當前任務依賴前一個任務的執行結果,這種問題基本上都可以用 Future 來解決。在分析這種問題的過程中,建議你用有向圖描述一下任務之間的依賴關系,同時將線程的分工也做好,類似於燒水泡茶最優分工方案那幅圖。對照圖來寫代碼,好處是更形象,且不易出錯

https://blog.csdn.net/pizicai007/article/details/107134991/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM