EnableAsync Async 使用詳解

2021-10-18 03:43:09 字數 1887 閱讀 8180

我們在使用多執行緒的時候,往往需要建立thread類,或者實現runnable介面,如果要使用到執行緒池,我們還需要來建立executors,在使用spring中,已經給我們做了很好的支援。只要要@enableasync就可以使用多執行緒。使用@async就可以定義乙個執行緒任務。通過spring給我們提供的threadpooltaskexecutor就可以使用執行緒池。

預設情況下,spring將搜尋相關的執行緒池定義:要麼在上下文中搜尋唯一的taskexecutor bean,要麼搜尋名為「taskexecutor」的executor bean。如果兩者都無法解析,則將使用******asynctaskexecutor來處理非同步方法呼叫。

@servletcomponentscan

@enableasync

public static void main(string args) throws exception

private static final int corepoolsize = 10; // 核心執行緒數(預設執行緒數)

private static final int maxpoolsize = 100; // 最大執行緒數

private static final int keepalivetime = 10; // 允許執行緒空閒時間(單位:預設為秒)

private static final int queuecapacity = 200; // 緩衝佇列數

private static final string threadnameprefix = "async-service-"; // 執行緒池名字首

@bean("taskexecutor") // bean的名稱,預設為首字母小寫的方法名

public threadpooltaskexecutor getasyncexecutor()

}

@async(value = "taskexecutor")

public void getstatus() throws exception

} catch (exception e)

});system.out.println("結束了");

}@async(value = "taskexecutor")

public void getstatus2() throws exception

} catch (exception e)

});system.out.println("結束了2");

}

執行結果:::

開始了

開始了201

2345

6789

結束了012

3456

789結束了2

通過執行結果可以看出來 第二個方法並沒有在第乙個方法結束之後才呼叫,而是在第乙個方法執行過程中就執行了第二個方法.實現了多執行緒非同步執行 .

使用這個是需要注意的地方:

一、非同步方法使用static修飾

二、非同步類沒有使用@component註解(或其他註解)導致spring無法掃瞄到非同步類

三、非同步方法不能與非同步方法在同乙個類中

四、類中需要使用@autowired或@resource等註解自動注入,不能自己手動new物件

五、如果使用springboot框架必須在啟動類中增加@enableasync註解

六、在async 方法上標註@transactional是沒用的。 在async 方法呼叫的方法上標註@transactional 有效。

七、呼叫被@async標記的方法的呼叫者不能和被呼叫的方法在同一類中不然不會起作用

八、使用@async時要求是不能有返回值的不然會報錯的 因為非同步要求是不關心結果的

Spring MVC JsonView使用詳解

spring 提供了對jackson 非常好的支援,可以檢視此spring jackson demo 來掌握。這裡著重說一下 jsonview的用法 jsonview可以過濾序列化物件的字段屬性,可以使你有選擇的序列化物件。下面看乙個例子 首先我們定義乙個view類,裡面包含我們對 要序列化的字段 ...

Spring MVC JsonView使用詳解

原文出處 spring 提供了對jackson 非常好的支援,這裡著重說一下 jsonview的用法 jsonview可以過濾序列化物件的字段屬性,可以使你有選擇的序列化物件。下面看乙個例子 首先我們定義乙個view類,裡面包含我們對 要序列化的字段 的定義,我們暫時歸為summary 摘要 屬於s...

vue better scroll外掛程式使用詳解

什麼是 better scroll better scroll 是乙個移動端滾動的解決方案,它是基於 iscroll 的重寫,它和 i 的主要區別在 這裡 better scroll 也很強大,不僅可以做普通的滾動列表,還可以做輪播圖 picker 等等。在需要的檔案中新增 import bscor...