Spring+TaskExecutor實現執行緒池管理
目錄
寫在前面
執行緒池可以很好的幫助我們管理執行緒,它會預先建立若干數量的執行緒,並且不能由開發者直接對執行緒的建立進行控制,這樣,消除了頻繁建立和消亡執行緒的系統資源開銷。
那麼在Spring中,已經幫我們集成了執行緒池的功能,我們在專案中使用TaskExecutor類就可以實現執行緒池的管理。
Spring配置資訊
由於我們是在Spring專案中使用,所以不用再新增相關Jar包。只需要在Spring的配置檔案中,新增相應的IOC。
<bean id ="taskExecutor" class ="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" >
<property name ="corePoolSize" value ="5" />
<property name ="keepAliveSeconds" value ="300" />
<property name ="maxPoolSize" value ="10" />
<property name ="queueCapacity" value ="25" />
</bean>
執行緒池引數
- corePoolSize:執行緒池維護執行緒的最少數量
- keepAliveSeconds:執行緒池維護執行緒所允許的空閒時間
- maxPoolSize:執行緒池維護執行緒的最大數量
- queueCapacity:執行緒池所使用的緩衝佇列
當一個任務通過execute( new Runnable( ) )方法欲新增到執行緒池時:
(1)如果此時執行緒池中的數量小於corePoolSize,即使執行緒池中的執行緒都處於空閒狀態,也要建立新的執行緒來處理被新增的任務。
(2)如果此時執行緒池中的數量等於 corePoolSize,但是緩衝佇列 workQueue未滿,那麼任務被放入緩衝佇列。
(3)如果此時執行緒池中的數量大於corePoolSize,緩衝佇列workQueue滿,並且執行緒池中的數量小於maximumPoolSize,建新的執行緒來處理被新增的任務。
(4)如果此時執行緒池中的數量大於corePoolSize,緩衝佇列workQueue滿,並且執行緒池中的數量等於maximumPoolSize,那麼通過 handler所指定的策略來處理此任務。也就是:處理任務的優先順序為:核心執行緒corePoolSize、任務佇列workQueue、最大執行緒 maximumPoolSize,如果三者都滿了,使用handler處理被拒絕的任務。
(5)當執行緒池中的執行緒數量大於 corePoolSize時,如果某執行緒空閒時間超過keepAliveTime,執行緒將被終止。這樣,執行緒池可以動態的調整池中的執行緒數。
程式碼實現
package test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.task.TaskExecutor;
import java.util.*;
/**
*
* @ClassName TaskExecutorDemo
* @Description
* @author McGRADY
* @date 2018年8月29日
*/
public class TaskExecutorDemo {
@Autowired
private TaskExecutor taskExecutor;
public void executor() {
// 實現業務邏輯
taskExecutor.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("呼叫執行緒執行業務邏輯");
}
});
}
}
部落格參考
相關推薦
Spring+TaskExecutor實現執行緒池管理
目錄 目錄 寫在前面 執行緒池引數 程式碼實現 部落格參考 寫在前面 執行緒池可以很好的幫助我們管理執行緒,它會預先建立若干數量的執行緒,並且不能由開發者直接對執行緒的建立進行控制,這樣,消除了頻繁建立和消亡執行緒的系統資源開銷。
spring 無配置檔案實現執行緒池管理
最近做一個文件轉換功能比較耗時,所以用到了執行緒池來處理。Spring管理執行緒池有兩種方式,第一種是XML配置檔案配置執行緒池的Bean,然後在用的時候像Controller引用Service的Bean一樣的引用執行緒池物件就可以了。第二種方式是無配置檔案,就是全是java
2、使用SPRING中的執行緒池ThreadPoolTaskExecutor實現JAVA併發
new Thread的弊端如下:a. 每次new Thread新建物件效能差。b. 執行緒缺乏統一管理,可能無限制新建執行緒,相互之間競爭,及可能佔用過多系統資源導致宕機或oom。c. 缺乏更多功能,如定時執行、定期執行、執行緒中斷。相比new Thread,Java提供的四種執行緒池的好處在於:a
使用SPRING中的執行緒池ThreadPoolTaskExecutor實現JAVA併發
使用SPRING中的執行緒池ThreadPoolTaskExecutor實現併發。 一:不需要返回值的情況 1,初始化執行緒池 Java程式碼 ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPool
spring+ActiveMQ+JMS+執行緒池實現簡單的分散式,多執行緒,多工的非同步任務處理系統
前言:隨著系統的業務功能不斷增強,傳統的單機、單任務,單執行緒的執行模式已經逐漸的被淘汰,取而代之的是分散式,多工,多執行緒,當然,現在開源的這方面的框架也非常的多,大概的思想也都類似,下面就結合我這一年多的工作心得,分享一個簡單易實現的分散式,多工,多執行緒的非同步任務處理系統的基本實現。 1.系統部署圖
踩坑 Spring Cloud Hystrix 執行緒池佇列配置
背景: 有一次在生產環境,突然出現了很多筆還款單被掛起,後來排查原因,發現是內部系統呼叫時出現了Hystrix呼叫異常。在開發過程中,因為核心執行緒數設定的比較大,沒有出現這種異常。放到了測試環境,偶爾有出現這種情況,後來在網上查詢解決方案,網上的方案是調整maxQueueSize屬性就好了,當時調整了一下
spring mvc tomcat 執行緒池的坑
1 配置tomcat 執行緒池設定為20個執行緒處理請求 2 後臺框架是springmvc 3 模擬10個請求 4 發現tomcat執行緒池沒一個幹活的 5 幹活的是spring自己建立的執行緒 為什麼springmvc
Android Thread執行緒池管理類
package com.yunduan.parking.manager; /** * author cowards * created on 2018\10\17 0017 **/ import java.util.concurrent.ArrayBlockingQueue; impo
基於C++11實現執行緒池的工作原理.
基於C++11實現執行緒池的工作原理. 文章目錄 基於C++11實現執行緒池的工作原理. 簡介 執行緒池的組成 1、執行緒池管理器 2、工作執行緒 3、任務介面, 4、任務佇列
2.1 Spring boot/cloud 執行緒池
Step 1:ExecutePool配置,開啟@EnableAsync支援非同步任務 package com.springboot.begin.threadPool; import org.springframework.context.annotation.Bean; import org.
Spring中的執行緒池
前言: Java SE 5.0引入了ThreadPoolExecutor、ScheduledThreadPoolExecutor。Spring 2.x藉助ConcurrentTaskExecutor和ThreadPoolTaskExecutor能夠通過IoC配置形式自定義它
基於C++11實現執行緒池的工作原理
基於C++11實現執行緒池的工作原理. 不久前寫過一篇執行緒池,那時候剛用C++寫東西不久,很多C++標準庫裡面的東西沒怎麼用,今天基於C++11重新實現了一個執行緒池。 簡介 執行緒池(thread pool):一種執行緒的使用模式,執行緒過多會帶來排程開銷,進而影響快取區域性性和整體效能。而執行緒池
基於C++11 thread 實現執行緒池
轉自:https://blog.csdn.net/u013507368/article/details/48130151 這裡基於C++11 thread實現執行緒池,執行緒池不可拷貝。 1 nocopyable類 不可拷貝基類繼承
VC實現執行緒池
這兩天在做關於網路蜘蛛的程式,希望可以通過執行緒池來提高程式的效能,網上搜索了一下,看到這方面的東西還不少,跟大家分享一下!~有許多應用程式建立的執行緒花費了大量時間在睡眠狀態來等待事件的發生。還有一些執行緒進入睡眠狀態後定期被喚醒以輪詢工作方式來改變或者更新狀態資訊。執行緒池可以
使用C++11實現執行緒池的兩種方法
概述:什麼是執行緒池? 因為程式邊執行邊建立執行緒是比較耗時的,所以我們通過池化的思想:在程式開始執行前建立多個執行緒,這樣,程式在執行時,只需要從執行緒池中拿來用就可以了.大大提高了程式執行效率. 如何實現: 一般執行緒池都會有以下幾個部分構成: 1. 執行
Spring Boot系列二 Spring @Async非同步執行緒池用法總結
Spring非同步執行緒池的介面類,其實質是java.util.concurrent.ExecutorSpring 已經實現的異常執行緒池: 1. SimpleAsyncTaskExecutor:不是真的執行緒池,這個類不重用執行緒,每次呼叫都會建立一個新的執行緒。 2. SyncTaskExecutor:這
動態執行緒池管理器
程式碼 import com.google.common.util.concurrent.ThreadFactoryBuilder; import lombok.extern.log4j.Log4j2; import java.util.Iterator; import java.util.Map;
Android執行緒——使用ExecutorService類來實現執行緒的管理
個人部落格CoorChice,https://chenbingx.github.io/ ,最新文章將會首發CoorChice的部落格,歡迎探索哦 ! 同時,搜尋微信公眾號CoorChice,或掃描文章末尾二維碼,可以關注我的微信公眾號。同期文章也將會優先推送到微信公眾號中,以提醒
java執行緒池管理以及分散式
【編者按】多執行緒是程式設計師面試時常常會面對的問題,對多執行緒概念的掌握和理解水平,也常常被用來衡量一個人的程式設計實力。不錯,普通的多執行緒已經不容易了,那麼當多執行緒碰到“大象”又會產生什麼樣的火花?這裡我們為大家分享上海創行科技技術總監嚴瀾的博文——Java執行緒池管理及分散式Hadoop排程框架
java 執行緒池管理多執行緒操作Hbase資料庫完整專案
Hbase-site.xml配置檔案: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configur