著者:1819ドリーム
:オリジナルhttps://blog.csdn.net/weixin_39759846/article/details/93858446
著作権:この記事はブロガーのオリジナルの記事、再現され、ボーエンのリンクを添付してください!
入門
非同期タスクのシステムは、例えば、多くの利点を有する:1下)のI / Oなど、非同期提供することができ、限定されるもの; 2)システムのロバスト性を向上させる; 3)ユーザ・エクスペリエンスを向上させます。
2)プログラミング、同期に関して、プログラミングの難しさを増加させ、システムのパフォーマンスに影響を与えるだろう誤る1):しかし、例えばいくつかの欠点があります。
この章の利点と非同期タスクの欠点は、あまりにも多くの業務システムに応じて決定されるように、非同期タスクを使用するかどうか、説明を行いません。唯一SpringBoot非同期タスクとこの章では扱っています。
バージョン情報
-
JDK:1.8
-
SpringBoot:2.1.4.RELEASE
-
Mavenの:3.3.9
-
IDEA:2019年1月1日
非同期タスク
非同期タスクの使用については、それが結果は明らかではないかもしれません示しています。のは、いくつかの従来の方法を作成し、非同期作る、二つの結果の違いを見てみましょう。
最初のプロジェクト、ウェブのmaven-依存の導入を作成します。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
その後、いくつかの一般的に使用されるメソッドを作成します。
package com.yanfei1819.asynctaskdemo.task;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
/**
* Created by 追梦1819 on 2019-06-21.
*/
@Component
public class AsyncTask {
public void task01() throws InterruptedException {
Long start = System.currentTimeMillis();
System.out.println("这是第一个异步任务!");
Thread.sleep(2000);
Long end = System.currentTimeMillis();
System.out.println("第一个任务执行时间是:"+(end-start));
}
public void task02() throws InterruptedException {
Long start = System.currentTimeMillis();
System.out.println("这是第二个异步任务!");
Thread.sleep(3000);
Long end = System.currentTimeMillis();
System.out.println("第二个任务执行时间是:"+(end-start));
}
public void task03() throws InterruptedException {
Long start = System.currentTimeMillis();
System.out.println("这是第三个异步任务!");
Thread.sleep(4000);
Long end = System.currentTimeMillis();
System.out.println("第三个任务执行时间是:"+(end-start));
}
}
次のテストクラスを作成します。
package com.yanfei1819.asynctaskdemo.web.controller;
import com.yanfei1819.asynctaskdemo.task.AsyncTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by 追梦1819 on 2019-06-21.
*/
@RestController
public class TaskController {
@Autowired
private AsyncTask asyncTask;
@GetMapping("/testTask")
public void testTask() throws InterruptedException {
Long start = System.currentTimeMillis();
asyncTask.task01();
asyncTask.task02();
asyncTask.task03();
Long end = System.currentTimeMillis();
System.out.println("三个任务执行总时间是:"+(end-start));
}
}
最後に訪問し、プロジェクトを開始し localhost:8080/testTask
、以下の結果を:
これは明らかに非常に従来の同期方法です。ここでは、非同期処理のためにSpringBoot独自の非同期メソッドの実装を使用します。
我々は2つがある場所を変更する必要があります。
- また、クラスのノートを開始します
@EnableAsync
。 - 非同期メソッドに注釈を追加します
@Async
。
プロジェクト、同じパスへのアクセスを再起動し、以下の結果は以下のとおりです。
概要
非同期タスクを使用すると、他の用途と同様に、非常に単純で、SpringBootはまた、我々は唯一のコメントを、それらのいくつかを使用する必要があり、春のエコシステムに統合されます。フォローアップは、その原則を分析します。