1. 程式人生 > >Spring--springmvc配執行緒池Executor做多執行緒併發操作

Spring--springmvc配執行緒池Executor做多執行緒併發操作



載入xml檔案

在ApplicationContext.xml檔案裡面新增[java] view plain copy print?
  1. xmlns:task="http://www.springframework.org/schema/task"
xmlns:task="http://www.springframework.org/schema/task"
xmlns檔案並且xsi:schemaLocation中新增[java] view plain copy print?
  1. http://www.springframework.org/schema/task 
http://www.springframework.org/schema/task 
[java] view plain copy print?
  1. 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?
  1. <bean id="taskExecutor"class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"
    >  
  2.         <!-- 核心執行緒數 -->       
  3.         <property name="corePoolSize" value="${task.core_pool_size}" />  
  4.         <!-- 最大執行緒數 -->    
  5.         <property name="maxPoolSize" value="${task.max_pool_size}" />  
  6.         <!-- 佇列最大長度 -->  
  7.         <property name="queueCapacity"
     value="${task.queue_capacity}" />  
  8.         <!-- 執行緒池維護執行緒所允許的空閒時間,預設為60s -->  
  9.         <property name="keepAliveSeconds" value="${task.keep_alive_seconds}" />  
  10.     </bean>  
  11.     <!-- 註解式 -->  
  12.     <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?
  1. maxOpenPreparedStatements=20
  2. removeAbandoned=true
  3. removeAbandonedTimeout=1800
  4. logAbandoned=true
maxOpenPreparedStatements=20
removeAbandoned=true
removeAbandonedTimeout=1800
logAbandoned=true
這是分別對執行緒池做配置

新增依賴注入

在所需要的service或者controller類裡面新增[java] view plain copy print?
  1. @Resource(name = "taskExecutor")  
  2. private TaskExecutor taskExecutor;  
@Resource(name = "taskExecutor")
private TaskExecutor taskExecutor;

使用執行緒池進行併發操作

程式碼如下[java] view plain copy print?
  1. taskExecutor.execute(new Runnable() {  
  2.     @Override
  3.     publicvoid run() {  
  4.         // TODO Auto-generated method stub
  5.         try {  
  6.                                        //要進行的併發操作
  7.         } catch (Exception e) {  
  8.             // TODO Auto-generated catch block
  9.             e.printStackTrace();  
  10.         }  
  11.     }  
  12. });  
			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?
  1. @Controller
  2. publicclass IndexController {  
  3. int studentscount = 0;  
  4. @RequestMapping(value = "/index.html")  
  5.     public ModelAndView goIndex() {  
  6.         logBefore(logger, "列表Center");  
  7.         ModelAndView mv = this.getModelAndView();  
  8.                 taskExecutor.execute(new Runnable() {  
  9.                 @Override
  10.                 publicvoid run() {  
  11.                     // TODO Auto-generated method stub
  12.                     // 得到所有學生人數
  13.                     try {  
  14.                                           studentscount = coursesService.getStudentCount(pd);  
  15.                     } catch (Exception e) {  
  16.                         // TODO Auto-generated catch block
  17.                         e.printStackTrace();  
  18.                     }  
  19.                 }  
  20.             });  
  21.                   mv.addObject("studentscount", studentscount);  
  22.                   mv.setViewName("common/index");  
  23.                   return mv;  
  24. }  
@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,很多文章寫了一半就停止了。 在寫某一系列的過程中總有其他想寫的內容蹦出來,