SpringBoot使用非同步任務
1. 開啟非同步任務
package com.pibigstar;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication
@EnableAsync //開啟非同步任務
public class SpringbootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
2. 編寫非同步任務
package com.pibigstar.task;
import java.util.concurrent.Future;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;
@Component
public class AsyncTask {
@Async //非同步方法註解
public Future<Boolean> task1() throws InterruptedException {
long start = System.currentTimeMillis();
Thread.sleep(1000);
long end = System.currentTimeMillis();
System.out.println("=====任務1 耗時:" +(end-start)+"======");
//返回true,告訴此任務已完成
return new AsyncResult<Boolean>(true);
}
@Async //非同步方法註解
public Future<Boolean> task2() throws InterruptedException {
long start = System.currentTimeMillis();
Thread.sleep(800);
long end = System.currentTimeMillis();
System.out.println("=====任務2 耗時:"+(end-start)+"======");
//返回true,告訴此任務已完成
return new AsyncResult<Boolean>(true);
}
@Async //非同步方法註解
public Future<Boolean> task3() throws InterruptedException {
long start = System.currentTimeMillis();
Thread.sleep(600);
long end = System.currentTimeMillis();
System.out.println("=====任務3 耗時:"+(end-start)+"======");
//返回true,告訴此任務已完成
return new AsyncResult<Boolean>(true);
}
}
3. 啟動非同步任務
package com.pibigstar.web;
import java.util.concurrent.Future;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.pibigstar.task.AsyncTask;
@RestController
@RequestMapping("/task")
public class AsyncTaskController {
@Autowired
private AsyncTask asyncTask;
@GetMapping("test")
public String test() throws InterruptedException {
long start = System.currentTimeMillis();
Future<Boolean> a = asyncTask.task1();
Future<Boolean> b = asyncTask.task2();
Future<Boolean> c = asyncTask.task3();
//迴圈到三個任務全部完成
while (!a.isDone()||!b.isDone()||!c.isDone()) {
if (a.isDone()&&b.isDone()&&c.isDone()) {
break;
}
}
long end = System.currentTimeMillis();
String result = "任務完成,一共用時為:"+(end-start)+"毫秒";
System.out.println(result);
return result;
}
}
4. 執行結果
任務1 睡眠了 1000毫秒,任務2 睡眠了800毫秒,任務3 睡眠了600毫秒,如果是同步執行的話三個任務完成應該是2400毫秒,而這裡只使用了1005毫秒,說明我們的任務執行確實是非同步執行
5. 非同步執行使用場景
相關推薦
SpringBoot------非同步任務的使用
步驟,如圖所示: 1.新增非同步任務業務類 package top.ytheng.demo.task; import java.util.concurrent.Future; import org.springframework.scheduling.annotation.Async; im
帶著新人學springboot的應用09(springboot+非同步任務)
本來想說說檢索的,不過不知道什麼鬼,下載ElasticSearch太慢了,還是放一下,後面有機會再補上!今天就說個簡單的東西,來說說任務。 什麼叫做任務呢?其實就是類中實現了一個什麼功能的方法。常見的任務就是非同步任務,定時任務,發郵件。 非同步任務:其實就是一個很特別的方法,這個方法沒有返回
SpringBoot 非同步任務
SpringBoot 非同步任務 介紹 在Java應用中,絕大多數情況下都是通過同步的方式來實現互動處理的;但是在 處理與第三方系統互動的時候,容易造成響應遲緩的情況,之前大部分都是使用 多執行緒來完成此類任務,其實,在Spring 3.x之後,就已經內建了@Async來完 美解決這個問
Springboot - Async 非同步任務
package com.shi.snyc; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; imp
Springboot整合非同步任務
Springboot非同步執行使用場景 傳送簡訊 傳送郵件 App訊息推送 節省運維凌晨釋出任務時間提供效率 Springboot非同步執行程式 使用註解@EnableAsync開啟非同步,會自動掃描 定義@Component @Asy
SpringBoot入門筆記11——springboot定時任務和非同步任務介紹
Springboot 定時任務和非同步任務 java 中常用的定時任務 1、常見定時任務 Java自帶的java.util.Timer類 timer:配置比較麻煩,時間延後問題 timertask:不推薦 2、Quartz框架 配置更簡單 xml或者註解 3、
二十三、 SpringBoot之任務(非同步、定時、郵件)
一、非同步任務 在Java應用中,絕大多數情況下都是通過同步的方式來實現互動處理的;但是在處理與第三方系統互動的時候,容易造成響應遲緩的情況,之前大部分都是使用多執行緒來完成此類任務,其實,在Spring 3.x之後,就已經內建了@Async來完美解決這個問題。 兩個註解
SpringBoot與非同步任務、定時任務、郵件任務
環境: IDEA版本2017.3.1 x64, JDK1.8, SpringBoot2.1.1 非同步任務 在需要開啟非同步的服務加上註解:@Async @Service public class AsyncService { //告訴SpringBoot這是一個非同步任務
springboot的非同步任務(帶返回值和不帶返回值的處理)
package com.example.demo.async; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.
SpringBoot整合非同步任務以及使用場景
一 點睛 使用註解@EnableAsync開啟非同步,會自動掃描 定義@Component @Async作為元件被容器掃描執行 非同步任務執行使用場景 1 傳送簡訊 2 傳送郵件 3 App
SpringBoot整合定時任務和非同步任務處理 3節課
1、SpringBoot定時任務schedule講解 簡介:講解什麼是定時任務和常見定時任務區別 1、常見定時任務 Java自帶的java.util.Timer類
springboot之非同步任務,有彩蛋!
springboot非同步任務 ps:文中有個小彩蛋玩笑,請勿當真 應用場景 :舉個栗子:一般在專案開發中都會有登入成功失敗記錄日誌,或者記錄操作日誌的需求,如果不採用非同步記錄的方式,多少會影響介面的效率,故採用非同步的方式記錄 springboot2.x中非同步的
SpringBoot中@Async註解配合@EnableAsync註解開啟非同步任務詳解
前言 @Async為非同步註解,放到需要使用非同步的方法上面,表示呼叫該方法的執行緒與此方法非同步執行,需要配合@EnableAsync註解使用。 沒有非同步執行,沒有@Async註解時 1、建立一個普通的類,並注入到IOC容器中 package com.ex
SpringBoot中的非同步任務、定時任務和郵件任務
一、SpringBoot中的非同步任務 在Java應用中,絕大多數情況下都是通過同步的方式來實現互動處理的,但是在處理與第三方系統互動的時候,容易造成響應遲緩的情況,之前大部分都是使用多執行緒來完成此類任務,其實,在Spring 3.x之後,就已經內建了@Async來完美解決這個問題
SpringBoot使用非同步任務
1. 開啟非同步任務 package com.pibigstar; import org.springframework.boot.SpringApplication; import org.s
springboot中使用非同步任務
在springboot中使用簡單的非同步任務 同步情況 首先來看一下同步情況下的程式碼,在service中添加了一個執行緒等待方法 @Service public class AsyncService { public void asyncHello(){
SpringBoot(十) 非同步任務,定時任務和郵件任務
非同步任務 “非同步呼叫”對應的是“同步呼叫”,同步呼叫指程式按照定義順序依次執行,每一行程式都必須等待上一行程式執行完成之後才能執行;非同步呼叫指程式在順序執行時,不等待非同步呼叫的語句返回結果就執行後面的程式。 @Service public class AsyncService {
springboot執行非同步任務
1.啟動類上使用註解@EnableAsync開啟非同步,會自動進行掃描。2.定義@Component類, @Async方法,作為元件被容器掃描執行。使用場景:傳送簡訊,傳送郵件,app訊息推送,節省運維凌晨釋出任務時間提高效率
【玩轉SpringBoot】非同步任務執行與其執行緒池配置
同步程式碼寫起來簡單,但就是怕遇到耗時操作,會影響效率和吞吐量。此時非同步程式碼才是王者,但涉及多執行緒和執行緒池,以及非同步結果的獲取,寫起來頗為麻煩。不過在遇到SpringBoot非同步任務時,這個問題就不存在了。因為Spring家族是最替使用者考慮的。結果就是,像同步一樣簡單,像非同步一樣強大。眾所熟悉
springboot定時任務
factor 添加 actor 返回值 olt adp 思路分析 web ack (1)思路說明; (a)首先這裏我們需要重新認識一個類ThreadPoolTaskScheduler:線程池任務調度類,能夠開啟線程池進行任務調度。 (b)ThreadPoolTaskSche