Spring--springmvc配執行緒池Executor做多執行緒併發操作
載入xml檔案
在ApplicationContext.xml檔案裡面新增[java] view plain copy print?- xmlns:task="http://www.springframework.org/schema/task"
xmlns:task="http://www.springframework.org/schema/task"
xmlns檔案並且xsi:schemaLocation中新增[java] view plain copy print?- http://www.springframework.org/schema/task
[java] view plain copy print?http://www.springframework.org/schema/task
- http://www.springframework.org/schema/task/spring-task.xsd
http://www.springframework.org/schema/task/spring-task.xsd
在spring中配置Executor
在ApplicationContext.xml檔案裡面新增[java] view plain copy print?
- <bean id="taskExecutor"class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"
- <!-- 核心執行緒數 -->
- <property name="corePoolSize" value="${task.core_pool_size}" />
- <!-- 最大執行緒數 -->
- <property name="maxPoolSize" value="${task.max_pool_size}" />
- <!-- 佇列最大長度 -->
- <property name="queueCapacity"
- <!-- 執行緒池維護執行緒所允許的空閒時間,預設為60s -->
- <property name="keepAliveSeconds" value="${task.keep_alive_seconds}" />
- </bean>
- <!-- 註解式 -->
- <task:annotation-driven />
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<!-- 核心執行緒數 -->
<property name="corePoolSize" value="${task.core_pool_size}" />
<!-- 最大執行緒數 -->
<property name="maxPoolSize" value="${task.max_pool_size}" />
<!-- 佇列最大長度 -->
<property name="queueCapacity" value="${task.queue_capacity}" />
<!-- 執行緒池維護執行緒所允許的空閒時間,預設為60s -->
<property name="keepAliveSeconds" value="${task.keep_alive_seconds}" />
</bean>
<!-- 註解式 -->
<task:annotation-driven />
在dbconfig.properties新增[java] view plain copy print?- maxOpenPreparedStatements=20
- removeAbandoned=true
- removeAbandonedTimeout=1800
- logAbandoned=true
maxOpenPreparedStatements=20
removeAbandoned=true
removeAbandonedTimeout=1800
logAbandoned=true
這是分別對執行緒池做配置新增依賴注入
在所需要的service或者controller類裡面新增[java] view plain copy print?- @Resource(name = "taskExecutor")
- private TaskExecutor taskExecutor;
@Resource(name = "taskExecutor")
private TaskExecutor taskExecutor;
使用執行緒池進行併發操作
程式碼如下[java] view plain copy print?- taskExecutor.execute(new Runnable() {
- @Override
- publicvoid run() {
- // TODO Auto-generated method stub
- try {
- //要進行的併發操作
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- });
taskExecutor.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
//要進行的併發操作
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
提示
注意線上程中操作變數時候變數的作用域範圍。需要在這個controller或者sevice中宣告變數如下[java] view plain copy print?- @Controller
- publicclass IndexController {
- int studentscount = 0;
- @RequestMapping(value = "/index.html")
- public ModelAndView goIndex() {
- logBefore(logger, "列表Center");
- ModelAndView mv = this.getModelAndView();
- taskExecutor.execute(new Runnable() {
- @Override
- publicvoid run() {
- // TODO Auto-generated method stub
- // 得到所有學生人數
- try {
- studentscount = coursesService.getStudentCount(pd);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- });
- mv.addObject("studentscount", studentscount);
- mv.setViewName("common/index");
- return mv;
- }
@Controller
public class IndexController {
int studentscount = 0;
@RequestMapping(value = "/index.html")
public ModelAndView goIndex() {
logBefore(logger, "列表Center");
ModelAndView mv = this.getModelAndView();
taskExecutor.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// 得到所有學生人數
try {
studentscount = coursesService.getStudentCount(pd);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
mv.addObject("studentscount", studentscount);
mv.setViewName("common/index");
return mv;
}
相關推薦
Spring--springmvc配執行緒池Executor做多執行緒併發操作
載入xml檔案在ApplicationContext.xml檔案裡面新增[java] view plain copy print?xmlns:task="http://www.springframework.org/schema/task"xmlns:task="http
Java執行緒池架構(二)多執行緒排程器
在前面介紹了java的多執行緒的基本原理資訊:《Java執行緒池架構原理和原始碼解析》,本文對這個java本身的執行緒池的排程器做一個簡單擴充套件,如果還沒讀過上一篇文章,建議讀一下,因為這是排程器的核心元件部分。 我們如果要用java預設的執行緒池來做排程器,一種選擇就是Timer和Time
執行緒池建立和多執行緒等待
在部落格園看到一篇部落格 C# -- 使用執行緒池 ThreadPool 執行多執行緒任務 在這裡使用了執行緒池 雖然也實現了執行緒等待 但是執行緒等待實現的太死板 如果定義未知數量的執行緒池無法實現等待 ManualResetEvent數量已經定死 所
執行緒池使用ExecutorService 多執行緒處理佇列任務
最近轉到銀行工作,在做最核心的財務賬務部分,對我來說是一個比較新的東西,工作也已經四年有餘,接觸一些新的東西,也是不錯,每天也累得像狗... 不說了。/捂臉 接下來說一種非常實用的多執行緒操作模式,此方式能夠應對大部分的多執行緒操作,稍微改一下往裡面套就可以滿足大部分的業務
使用執行緒池與CountDownLatch多執行緒提升系統性能
下面這個業務場景,大家可能都會遇到,在遍歷一個list的時候,需要對list中的每個物件,做一些複雜又耗時的操作,比如取出物件的uid,遠端呼叫一次userservice的getUserByUid方法,這屬於IO操作了,可怕的是遍歷到每個物件時,都得執行一次這種
執行緒池中利用多執行緒大量插入資料
package com.test.wyl; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.con
Java執行緒池Executor框架詳解
Java的執行緒既是工作單元,也是執行機制。從JDK 5開始,把工作單元與執行機制分離開來。工作單元包括Runnable和Callable,而執行機制由Executor框架提供。 Executor框架簡介在HotSpot VM的執行緒模型中,Java執行緒(java.lang.Thread)被一對一對映為本
Tomcat6執行緒池(Executor Thread pool)的配置
原文地址:http://www.java2000.net/p11864配置很簡單第一步,開啟共享的執行緒池<Servicename="Catalina"><!--The connectors can use a shared executor, you can
java執行緒之Executor框架與執行緒池
執行緒雖然在web開發中用的不算特別多,但在特定的情況下還是能發揮重要重要作用的,因此即使用的少還是掌握下比較好;下面先回顧下比較執行緒的常規實現方法 1 繼承Thread類 2 實現runnable介面(使用較多) java5之後有了新的執行緒實現方式,java5可以使用
執行緒池executor,executorService,ThreadPoolExecutor
Executor是一個介面,他是Executor框架的基礎,它將任務的提交與任務的執行分離。 Executor介面中之定義了一個方法execute(Runnable command),該方法接收一個Runable例項,它用來執行一個任務,任務即一個實現了Runnable介面
慕課網實戰·高併發探索(十四):執行緒池 Executor
特別感謝:慕課網jimin老師的《Java併發程式設計與高併發解決方案》課程,以下知識點多數來自老師的課程內容。 jimin老師課程地址:Java併發程式設計與高併發解決方案 new Thread的弊端 每次new Thread 新建物件,效能
spring執行緒池在新的執行緒中獲取不到注入的例項
spring執行緒池獲取注入的例項問題 1、問題描述: 配置spring的執行緒池,在呼叫執行緒池時,建立的新執行緒中獲取不到已注入的例項,所以在呼叫方法時會報空指標異常。 2、程式描述: 呼叫執行緒
安卓(Android)中如何優雅的 建立/執行 非同步任務/回撥(AsyncTask 、Thread、Job、CallBack、Handler) ?執行緒池(Executor)
How to use? 1、first step: copy the file "ExcuteTaskManager" and "ExcuteTask" to your project 2、second step: init the library in your application or
多執行緒--做單元測試時,使用執行緒池發現並沒有執行指定程式碼,直接跳過
案例 今天做單元測試除錯介面,發現介面呼叫成功但是並沒有執行執行緒池執行的方法,而是直接跳過執行程式碼 ExecutorService pool = Executors.newFixedThre
java&android執行緒池-Executor框架之ThreadPoolExcutor&ScheduledThreadPoolExecutor淺析(多執行緒程式設計之三)
java多執行緒-概念&建立啟動&中斷&守護執行緒&優先順序&執行緒狀態(多執行緒程式設計之一)java多執行緒同步以及執行緒間通訊詳解&消費者生產者模式&死鎖&Thread.join()(多執行緒程式設計之二)
Spring的執行緒池和JDK的執行緒池的區別?
API 文件中很清楚,SpringFrameWork 的 ThreadPoolTaskExecutor 是輔助 JDK 的 ThreadPoolExecutor 的工具類,它將屬性通過 JavaBeans 的命名規則提供出來,方便進行配置。 1.ThreadPoolEx
Java併發——執行緒池Executor框架
什麼是執行緒池? 執行緒池的概念大家應該都很清楚,幫我們重複管理執行緒,避免建立大量的執行緒增加開銷。 若採用"為每個任務分配一個執行緒"的方式會存在一些缺陷,尤其是當需要建立大量執行緒時: ①、執行緒生命週期的開銷非常高 ②、資源消耗 ③、穩定性 引入執行緒池
Tomcat優化實戰之一 執行緒池的優化 多看官方文件
Tomcat優化實戰之一 執行緒池的優化 加多人幹活 maxConnections受作業系統核心影響 openFiles 控制代碼 ulimit -a ulimit -a 命令檢視linux centos下的 1024預設 修改openFiles 伺服器的保護
10.執行緒和執行緒池的區別,執行緒池有哪些,什麼情況下使用
一:執行緒和執行緒池的區別 (1)new Thread 的弊端 a. 每次new Thread時,新建物件效能差。 b. 執行緒缺乏統一管理,可能無限制新建執行緒,相互之間競爭,可能佔用過多系統資源導致宕機或oom。 c. 缺乏更多功能
併發程式設計3:執行緒池的使用與執行流程
併發程式設計系列的文章醞釀好久了,但由於沒有時間和毅力去寫那麼多練習 demo,很多文章寫了一半就停止了。 在寫某一系列的過程中總有其他想寫的內容蹦出來,