1. 程式人生 > >SpringBoot使用非同步任務

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