SpringBoot 對Future模式的支援

2021-09-24 08:06:31 字數 1841 閱讀 2946

我們在實際專案中有些複雜運算、耗時操作,就可以利用多執行緒來充分利用cpu,提高系統吞吐量。springboot對多執行緒支援非常好,對我們的開發非常便捷。

future模式是多執行緒開發中非常常見的一種設計模式。核心思想是非同步呼叫。當我們執行乙個方法時,方法中有多個耗時任務需要同時去做,而且又不著急等待這個結果時可以讓客戶端立即返回然後,後台慢慢去計算任務。

當我們做一件事的時候需要等待,那麼我們就可以在這個等待時間內來去做其它事情,這樣就可以充分利用時間。比如我們點外賣,需要一段時間,那麼我們在等外賣的時間裡可以看點書,看個電影。這就是典型的future模式。如果是普通模式的話,就是等外賣的時候就等外賣,外賣到了後再去看書,極大的浪費時間。

springboot對future模式支援非常好,只需要簡單的**就能實現。

springboot 配置多執行緒需要兩個註解

@enableasync

在配置類中通過加@enableasync開啟對非同步任務的支援

@async

在需要執行的方法上加@async表明該方法是個非同步方法,如果加在類級別上,則表明類所有的方法都是非同步方法

@configuration

@enableasync

public

class

asyncconfig

implements

asyncconfigurer

}複製**

@service

public

class

futureservice

system.out.println("完成任務");

return

new asyncresult<>(thread.currentthread().getname());

}}複製**

【注】這裡的方法自動被注入使用上文配置的threadpooltaskexecutor

@resource

private futureservice futureservice;

@test

public

void

futuretest

()throws interruptedexception, executionexception

複製**

開始

2019-01-07 23:50:34.726 info 14648 --- [ main] o.s.s.concurrent.threadpooltaskexecutor : initializing executorservice

任務執行開始,需要:1000ms

do:0

do:1

do:2

do:3

另外乙個耗時任務,需要500ms

do:4

do:5

do:6

do:7

do:8

do:9

完成任務

計算結果輸出:threadpooltaskexecutor-1

共耗時:1016

process finished with exit code 0

複製**

本來需要至少1500ms 執行的任務現在只需要1016ms, 因為在執行耗時任務1的同時也在執行耗時任務2,兩個任務並行執行,這就是future模式的好處,在等待時間內去執行其它任務,能夠充分利用時間

【注】本文基於springboot 2.0

github 連線

Java執行緒 七 Callable和Future

public class callableandfuture futuretaskfuture new futuretask callable new thread future start try catch interruptedexception e catch executionexcept...

Java執行緒 六 Callable和Future

callable介面類似於runnable,從名字就可以看出來了,但是runnable不會返回結果,並且無法丟擲返回結果的異常,而callable功能更強大一些,被執行緒執行後,可以返回值,這個返回值可以被future拿到,也就是說,future可以拿到非同步執行任務的返回值,下面來看乙個簡單的例子...

Java執行緒 七 Callable和Future

public class callableandfuture futuretaskfuture new futuretask callable new thread future start try catch interruptedexception e catch executionexcept...