首頁 Java java教程 TaskExecutor介面與型別介紹

TaskExecutor介面與型別介紹

Jun 25, 2017 am 09:39 AM
實例

一 TaskExecutor介面

  Spring的TaskExecutor介面等同於Java.util.concurrent.Executor介面。 實際上,它存在的主要原因是為了在使用執行緒池的時候,將對Java 5的依賴抽象化。 這個介面只有一個方法execute(Runnable task),它根據執行緒池的語意和配置,來接受一個執行任務。
  最初創建TaskExecutor是為了在需要時給其他Spring元件提供一個線程池的抽象。 例如ApplicationEventMulticaster元件、JMS的AbstractMessageListenerContainer和對Quartz的整合都使用了TaskExecutor抽象來提供執行緒池。 當然,如果你的bean需要執行緒池行為,你也可以使用這個抽象層。

二 TaskExecutor類型

#  在Spring發行包中預先定義了一些TaskExecutor實作。有了它們,你甚至不需要再自行實現了。

  • SimpleAsyncTaskExecutor 類別

#  這個實作不重複使用任何線程,或者說它每次呼叫都啟動一個新線程。但是,它還是支援對並發總數設限,當超過線程並發總數限制時,阻塞新的調用,直到有位置被釋放。如果你需要真正的池,請繼續往下看。

  • SyncTaskExecutor類別

#  這個實作不會非同步執行。相反,每次呼叫都在發起呼叫的執行緒中執行。它的主要用處是在不需要多執行緒的時候,例如簡單的test case。

  • ConcurrentTaskExecutor 類別

  這個實作是Java 5 java.util.concurrent.Executor類別的包裝。有另一個備選, ThreadPoolTask​​Executor類,它暴露了Executor的配置參數作為bean屬性。很少需要使用ConcurrentTaskExecutor, 但是如果ThreadPoolTask​​Executor不敷所需,ConcurrentTaskExecutor是另一個替代品。

  • SimpleThreadPoolTask​​Executor 類別

  這個實作其實是Quartz的SimpleThreadPool類別的子類,它會監聽Spring的生命週期回呼。當你有線程池,需要在Quartz和非Quartz元件中共用時,這是它的典型用處。

  • ThreadPoolTask​​Executor 類別

#  它不支援任何對java.util.concurrent套件的替換或下行移植。 Doug Lea和Dawid Kurzyniec對java.util.concurrent的實作都採用了不同的套件結構,導致它們無法正確運作。

  這個實作只能在Java 5環境中使用,但卻是這個環境中最常使用的。它暴露的bean properties可以用來配置一個java.util.concurrent.ThreadPoolExecutor,把它包裝到一個TaskExecutor。如果你需要更先進的類,例如ScheduledThreadPoolExecutor,我們建議你使用ConcurrentTaskExecutor來替代。

  • TimerTaskExecutor類別

#  這個實作使用一個TimerTask作為其背後的實作。它和SyncTaskExecutor的不同在於,方法呼叫是在一個獨立的線程中進行的,雖然在那個線程中是同步的。

  • WorkManagerTaskExecutor類別

#  CommonJ 是BEA和IBM共同開發的一套規格。這些規範並非java ee的標準,但它是BEA和IBM的應用伺服器實現的共同標準

這個實現使用了CommonJ WorkManager作為其底層實現,是在Spring context中配置CommonJ WorkManager應用的最重要的類。和SimpleThreadPoolTask​​Executor類似,這個類別實作了WorkManager接口,因此可以直接作為WorkManager使用。

三TaskExcutor簡單實例

#1 taskExcutor

package com.test;import org.springframework.core.task.TaskExecutor;public class MainExecutor {     private TaskExecutor taskExecutor;  public MainExecutor (TaskExecutor taskExecutor) {      this.taskExecutor = taskExecutor;    
        }  public void printMessages() {      for(int i = 0; i < 25; i++) {        
                taskExecutor.execute(new MessagePrinterTask("Message" + i));      
            }    
        }  
          
          private class MessagePrinterTask implements Runnable {      private String message;      public MessagePrinterTask(String message) {        this.message = message;      
            }      public void run() {        
                System.out.println(message);      
            }  
        } 
}
登入後複製
View Code

2 main

package com.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TaskTest {//本地测试,不用部署到tomcatpublic static void main(String[] args) {
        System.out.println("测试任务调度开始..."); 
        ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");     
        MainExecutor te = (MainExecutor)appContext.getBean("taskExecutorExample");  
        te.printMessages();  
        System.out.println("--------"); 
    } 
}
登入後複製
View Code
###########################################################

3.applicationContext.xml配置

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/spring-beans.dtd"><beans>

 <bean id="taskExecutorExample" class="com.test.MainExecutor">
   <constructor-arg ref="taskExecutor" />
 </bean>

  <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">  <property name="corePoolSize" value="5" />  <property name="maxPoolSize" value="10" />  <property name="queueCapacity" value="25" />
  </bean></beans>
登入後複製
View Code

 

以上是TaskExecutor介面與型別介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python中的SVM實例 Python中的SVM實例 Jun 11, 2023 pm 08:42 PM

Python中的支援向量機(SupportVectorMachine,SVM)是一個強大的監督學習演算法,可以用來解決分類和回歸問題。 SVM在處理高維度資料和非線性問題的時候表現出色,被廣泛地應用於資料探勘、影像分類、文字分類、生物資訊學等領域。在本文中,我們將介紹在Python中使用SVM進行分類的實例。我們將使用scikit-learn函式庫中的SVM模

VUE3入門實例:製作一個簡單的影片播放器 VUE3入門實例:製作一個簡單的影片播放器 Jun 15, 2023 pm 09:42 PM

隨著新一代前端框架的不斷湧現,VUE3作為一個快速、靈活、易上手的前端框架備受熱愛。接下來,我們就來一起學習VUE3的基礎知識,製作一個簡單的影片播放器。一、安裝VUE3首先,我們需要在本地安裝VUE3。開啟命令列工具,執行以下命令:npminstallvue@next接著,新建一個HTML文件,引入VUE3:&lt;!doctypehtml&gt;

學習Golang指標轉換的最佳實務範例 學習Golang指標轉換的最佳實務範例 Feb 24, 2024 pm 03:51 PM

Golang是一門功能強大且高效的程式語言,可用於開發各種應用程式和服務。在Golang中,指標是一種非常重要的概念,它可以幫助我們更靈活和有效率地操作資料。指標轉換是指在不同類型之間進行指標操作的過程,本文將透過具體的實例來學習Golang中指標轉換的最佳實踐。 1.基本概念在Golang中,每個變數都有一個位址,位址就是變數在記憶體中的位置。

PHP 簡單網頁爬蟲開發實例 PHP 簡單網頁爬蟲開發實例 Jun 13, 2023 pm 06:54 PM

隨著網路的快速發展,數據已成為了當今資訊時代最為重要的資源之一。而網路爬蟲作為一種自動化獲取和處理網路數據的技術,也越來越受到人們的關注和應用。本文將介紹如何使用PHP開發簡單的網路爬蟲,並實現自動化取得網路資料的功能。一、網路爬蟲概述網路爬蟲是一種自動化取得和處理網路資源的技術,其主要工作流程是模擬瀏覽器行為,自動存取指定的URL位址並提取所

Python中的VAE演算法實例 Python中的VAE演算法實例 Jun 11, 2023 pm 07:58 PM

VAE是一種生成模型,全名為VariationalAutoencoder,中文譯為變分自編碼器。它是一種無監督的學習演算法,可以用來產生新的數據,例如圖像、音訊、文字等。與普通的自編碼器相比,VAE更加靈活和強大,能夠產生更複雜和真實的數據。 Python是目前使用最廣泛的程式語言之一,也是深度學習的主要工具之一。在Python中,有許多優秀的機器學習和深度

Gin框架中的驗證碼使用實例 Gin框架中的驗證碼使用實例 Jun 23, 2023 am 08:10 AM

隨著網路的普及,驗證碼已經成為了登入、註冊、找回密碼等操作的必要流程。在Gin框架中,實作驗證碼功能也變得異常簡單。本文將介紹如何在Gin框架中使用第三方函式庫實作驗證碼功能,並提供範例程式碼供讀者參考。一、安裝依賴函式庫在使用驗證碼之前,我們需要安裝一個第三方函式庫goCaptcha。安裝goCaptcha可以使用goget指令:$goget-ugithub

Oracle實例數量與資料庫效能關係 Oracle實例數量與資料庫效能關係 Mar 08, 2024 am 09:27 AM

Oracle實例數量與資料庫效能關係Oracle資料庫是業界知名的關係型資料庫管理系統之一,廣泛應用於企業級的資料儲存與管理。在Oracle資料庫中,實例是一個非常重要的概念。實例是指Oracle資料庫在記憶體中的運作環境,每個實例都有獨立的記憶體結構和後台進程,用於處理使用者的請求和管理資料庫的操作。實例數量對於Oracle資料庫的效能和穩定性有著重要的影響。

Python中的GAN演算法實例 Python中的GAN演算法實例 Jun 10, 2023 am 09:53 AM

生成對抗網路(GAN,GenerativeAdversarialNetworks)是一種深度學習演算法,它透過兩個神經網路互相競爭的方式來產生新的資料。 GAN被廣泛用於圖像、音訊、文字等領域的生成任務。在本文中,我們將使用Python編寫一個GAN演算法實例,用於產生手寫數位影像。資料集準備我們將使用MNIST資料集作為我們的訓練資料集。 MNIST資料集包含

See all articles