詳解Springboot對多執行緒的支援

2022-10-08 10:42:08 字數 3462 閱讀 6677

這兩天看阿里的j**a開發手冊,到多執行緒的時候說永遠不要用 new thread()這種方式來使用多執行緒。確實是這樣的,我一直在用執行緒池,到了springboot才發現他已經給我們提供了很方便的執行緒池機制。

本部落格**託管在github上

一、介紹

spring是通過任務執行器(taskexecutor)來實現多執行緒和併發程式設計,使用threadpooltaskexecutor來建立乙個基於線城池的taskexecutor。在使用執行緒池的大多數情況下都是非同步非阻塞的。我們配置註解@enableasync可以開啟非同步任務。然後在實際執行的方法上配置註解@async上宣告是非同步任務。

二、配置類

配置類**如下:

package com.spartajet.springbootlearn.thread;

import org.springframework.aop.interceptor.asyncuncaughtexceptionhandler;

import org.springframework.context.annotation.configuration;

import org.springframework.scheduling.annotation.asyncconfigurer;

import org.springframework.scheduling.annotation.enableasync;

import org.springframework.scheduling.concurrent.程式設計客棧threadpooltaskexecutor;

import j**www.cppcns.coma.util.concurrent.executor;

/** * @description

* @create 2017-02-22 下午11:53

* @email [email protected]

*/@configuration

@enableasync

public class threadconfig implements asyncconfigurer instance to be used when processing async

* method invocations.

*/@override

public executor getasyncexecutor()

/*** the instance to be used

* when an exception is thrown during an asynchronous method execution

* with return type.

*/@override

public asyncuncaughtexceptionhandler getasyncuncaughtexceptionhandler()

}解讀:利用enableasync來開啟springboot對於非同步任務的支援

配置類實現介面asyncconfigurator,返回乙個threadpooltaskexecutor執行緒池物件。

三、任務執行

任務執行**:

package com.spartajet.springbootlearn.thread;

import org.springframework.scheduling.annotation.async;

import org.springframework.stereotype.service;

/** * @description

* @create 2017-02-23 上午12:00

* @email [email protected]

*/@service

public class asynctaskservice crmihieg

}**解讀:

通過@async註解表明該方法是非同步方法,如程式設計客棧果註解在類上,那表明這個類裡面的所有方法都是非同步的。

四、測試**

package com.spartajet.springbootle程式設計客棧arn;

import com.spartajet.springbootlearn.thread.asynctaskservice;

import org.junit.test;

import org.junit.runner.runwith;

import org.springframework.beans.factory.annotation.autowired;

import org.springframework.boot.test.context.springboottest;

import org.springframework.test.context.junit4.springrunner;

@runwith (springrunner.class)

@springboottest

public class springbootlearnapplicationtests

@test

public void threadtest()

}}測試結果:

執行緒threadpooltaskexecutor-4 執行非同步任務:3

執行緒threadpooltaskexecutor-2 執行非同步任務:1

執行緒threadpooltaskexecutor-1 執行非同步任務:0

執行緒threadpooltaskexecutor-1 執行非同步任務:7

執行緒threadpooltaskexecutor-1 執行非同步任務:8

執行緒threadpooltaskexecutor-1 執行非同步任務:9

執行緒threadpooltaskexecutor-1 執行非同步任務:10

執行緒threadpooltaskexecutor-5 執行非同步任務:4

執行緒threadpooltaskexecutor-3 執行非同步任務:2

執行緒threadpooltaskexecutor-5 執行非同步任務:12

執行緒threadpooltaskexecutor-1 執行非同步任務:11

執行緒threadpooltaskexecutor-2 執行非同步任務:6

執行緒threadpooltaskexecutor-4 執行非同步任務:5

執行緒threadpooltaskexecutor-2 執行非同步任務:16

執行緒threadpooltaskexecutor-1 執行非同步任務:15

執行緒threadpooltaskexecutor-5 執行非同步任務:14

執行緒threadpooltaskexecutor-3 執行非同步任務:13

執行緒threadpooltaskexecutor-1 執行非同步任務:19

執行緒threadpooltaskexecutor-2 執行非同步任務:18

執行緒threadpooltaskexecutor-4 執行非同步任務:17

總結本文標題: 詳解springboot對多執行緒的支援

本文位址:

springboot 註解實現一對多,多對多

實體類question 提問 屬性 實體類answer 回答 型別 實體類user 使用者 屬性 乙個提問只能有乙個使用者來提問,這是一對一 乙個提問可以有多條回答,這是一對多 dao層需要將查詢得到的結果對映到類的屬性裡 property user id 表示要將返回的查詢結果賦值給questio...

ThreadPoolExecutor 多執行緒

from concurrent.futures import threadpoolexecutor,wait,all completed from queue import queue myqueue queue 佇列,用於儲存函式執行結果。多執行緒的問題之一 如何儲存函式執行的結果。def thr...

Hibernate一對多和多對一關係詳解

雙向一對多關係,一是關係維護端 owner side 多是關係被維護端 inverse side 在關係被維護端需要通過 joincolumn建立外來鍵列指向關係維護端的主鍵列。public classorderimplementsserializable public classorderitem...