日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java executor spring_Spring+TaskExecutor实例

發布時間:2023/12/1 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java executor spring_Spring+TaskExecutor实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一?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類的包裝。有另一個備選, ThreadPoolTaskExecutor類,它暴露了Executor的配置參數作為bean屬性。很少需要使用ConcurrentTaskExecutor, 但是如果ThreadPoolTaskExecutor不敷所需,ConcurrentTaskExecutor是另外一個備選。

SimpleThreadPoolTaskExecutor 類

這個實現實際上是Quartz的SimpleThreadPool類的子類,它會監聽Spring的生命周期回調。當你有線程池,需要在Quartz和非Quartz組件中共用時,這是它的典型用處。

ThreadPoolTaskExecutor 類

它不支持任何對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應用的最重要的類。和SimpleThreadPoolTaskExecutor類似,這個類實現了WorkManager接口,因此可以直接作為WorkManager使用。

三 TaskExcutor簡單實例

1 taskExcutor

packagecom.test;importorg.springframework.core.task.TaskExecutor;public classMainExecutor {privateTaskExecutor taskExecutor;publicMainExecutor (TaskExecutor taskExecutor) {this.taskExecutor =taskExecutor;

}public voidprintMessages() {for(int i = 0; i < 25; i++) {

taskExecutor.execute(new MessagePrinterTask("Message" +i));

}

}private class MessagePrinterTask implementsRunnable {privateString message;publicMessagePrinterTask(String message) {this.message =message;

}public voidrun() {

System.out.println(message);

}

}

}

View Code

2 main

packagecom.test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;public classTaskTest {//本地測試,不用部署到tomcat

public static voidmain(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配置

View Code

總結

以上是生活随笔為你收集整理的java executor spring_Spring+TaskExecutor实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。