springboot 中多執行緒 執行緒池如何實現

2021-10-10 15:35:20 字數 1805 閱讀 5335

1.  概念理解:

多執行緒和非同步呼叫之前一直不理解有什麼區別,發現,這兩個是一件事情的不同角度,多執行緒是方法,非同步是目的

在springboot 可以通過註解@async 搞定。

執行緒池:執行緒池引入的目的是為了解決:多次使用執行緒意味著,我們需要多次建立並銷毀執行緒。而建立並銷毀執行緒的過程勢必會消耗記憶體;執行緒池的好處,就是可以方便的管理執行緒,也可以減少記憶體的消耗。

在springboot  提供threadpooltaskexecutor 執行緒池

無返回值的任務使用public void execute(runnable command) 方法提交:子執行緒可能在主線程結束之後結束

有返回值的任務使用public futuresubmit(callable) 方法提交:因為提交任務後有個取資料的過程,在從future取資料的過程中,callable自帶的阻塞機制,這個機制保證主線程一定在子執行緒結束之後結束。反之如果沒有取資料,子執行緒可能會在主線程結束之後才結束。

其中有5個方法:比較常用的是 get() 和isdone()

get()方法可以當任務結束後返回乙個結果,如果呼叫時,工作還沒有結束,則會阻塞執行緒,直到任務執行完畢

get(long timeout,timeunit unit)做多等待timeout的時間就會返回結果

cancel(boolean mayinterruptifrunning)方法可以用來停止乙個任務,如果任務可以停止(通過mayinterruptifrunning來進行判斷),則可以返回true,如果任務已經完成或者已經停止,或者這個任務無法停止,則會返回false.

isdone()方法判斷當前方法是否完成

iscancel()方法判斷當前方法是否取消

2. 實現方法

(1)配置執行緒池

@configuration

public class globalconfiga

}

(2)實現非同步,多執行緒(@async)

@component

public class asynctask

@async("taskexecutor")

public completablefuture stringtask(string str)

}

(2)實現方式2

executor.submit

//通過註解引入配置

@resource(name = "taskexecutor")

private threadpooltaskexecutor executor;

//使用future方式執行多工

//生成乙個集合

listfutures = new arraylist<>();

//獲取後台全部有效運營人員的集合

listadminuserdolist = adminmanagerservice.getusertosentmsg(null);

for (adminusermsgresponse response : adminuserdolist) );

futures.add(future);}}

//查詢任務執行的結果

for (future<?> future : futurelist) else

}}

Async多執行緒在springboot中的使用

1.主類配置 enableasync開啟多執行緒配置 enableasync 開啟非同步呼叫 public static void main string args 2.方法塊新增 async註解 service public class helloserviceimpl implements he...

spring boot 整合多執行緒

配置pom檔案 org.mybatis.spring.bootgroupid mybatis spring boot starterartifactid 1.3.0version dependency org.springframework.bootgroupid spring boot confi...

SpringBoot啟動多執行緒

新建乙個執行緒池的配置類,需要被spring掃瞄到。configuration enableasync public class threadexecutorconfig 新增乙個普通類,裡面編寫需要執行的方法,方法加上 async註解,呼叫方法時自動啟動執行緒。component public c...