ホームページ  >  記事  >  Java  >  TaskExecutor インターフェイスとタイプの概要

TaskExecutor インターフェイスとタイプの概要

零下一度
零下一度オリジナル
2017-06-25 09:39:101864ブラウズ

TaskExecutorインターフェース

SpringのTaskExecutorインターフェースは、Java.util.concurrent.Executorインターフェースに相当します。 実際、その存在の主な理由は、スレッド プールを使用する際の Java 5 への依存を抽象化することです。 このインターフェイスにはメソッドexecute(Runnable task)が1つだけあり、スレッドプールのセマンティクスと構成に従って実行タスクを受け入れます。
TaskExecutor は元々、必要に応じて他の Spring コンポーネントにスレッド プールの抽象化を提供するために作成されました。 たとえば、ApplicationEventMulticaster コンポーネント、JMS の AbstractMessageListenerContainer、および Quartz の統合はすべて、TaskExecutor 抽象化を使用してスレッド プールを提供します。 もちろん、Bean がスレッド プールの動作を必要とする場合は、この抽象化レイヤーを使用することもできます。

TaskExecutor type

一部の TaskExecutor 実装は Spring ディストリビューション パッケージで事前定義されています。これらを使用すると、自分で実装する必要さえなくなります。

  • SimpleAsyncTaskExecutor class

この実装はスレッドを再利用しないか、呼び出されるたびに新しいスレッドを開始します。ただし、同時スレッドの合計数の制限の設定は引き続きサポートされており、同時スレッドの合計数の制限を超えると、ポジションが解放されるまで新しい呼び出しはブロックされます。実際のプールが必要な場合は、読み続けてください。

  • SyncTaskExecutor class

この実装は非同期には実行されません。代わりに、各呼び出しは呼び出しを開始したスレッドで実行されます。主な用途は、単純なテスト ケースなど、マルチスレッドが必要ない場合です。

  • ConcurrentTaskExecutorクラス

この実装は、Java 5のjava.util.concurrent.Executorクラスのラッパーです。もう 1 つの代替手段として、Executor の構成パラメータを Bean プロパティとして公開する ThreadPoolTask​​Executor クラスがあります。 ConcurrentTaskExecutor を使用する必要があることはほとんどありませんが、ThreadPoolTask​​Executor では不十分な場合は、ConcurrentTaskExecutor が別の代替手段になります。

  • SimpleThreadPoolTask​​Executorクラス

この実装は実際にはQuartzのSimpleThreadPoolクラスのサブクラスであり、Springのライフサイクルコールバックをリッスンします。これは、Quartz コンポーネントと非 Quartz コンポーネント間で共有する必要があるスレッド プールがある場合の一般的な使用法です。

  • ThreadPoolTask​​Executor class

java.util.concurrent パッケージの置き換えやダウンポートはサポートしていません。 Doug Lea と Dawid Kurzyniec の java.util.concurrent 実装は両方とも異なるパッケージ構造を使用しているため、正しく実行されません。

この実装は Java 5 環境でのみ使用できますが、この環境では最もよく使用されます。これが公開する Bean プロパティを使用して、java.util.concurrent.ThreadPoolExecutor を構成し、それを TaskExecutor にラップすることができます。 ScheduledThreadPoolExecutor などのより高度なクラスが必要な場合は、代わりに ConcurrentTaskExecutor を使用することをお勧めします。

  • TimerTaskExecutor class

この実装は背後の実装として TimerTask を使用します。 SyncTaskExecutor との違いは、メソッド呼び出しは別のスレッドで同期されますが、そのスレッドで実行されることです。

  • WorkManagerTaskExecutorクラス

CommonJはBEAとIBMが共同開発した仕様セットです。これらの仕様は Java ee 標準ではありませんが、BEA および IBM アプリケーション サーバー実装の共通標準です

この実装は、基盤となる実装として CommonJ WorkManager を使用し、Spring コンテキストで CommonJ WorkManager アプリケーションを構成するための最も重要なクラスです。 SimpleThreadPoolTask​​Executor と同様に、このクラスは WorkManager インターフェイスを実装しているため、WorkManager として直接使用できます。

TaskExcutor の 3 つの簡単な例

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);      
            }  
        } 
}
コードを表示

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("--------"); 
    } 
}
コードを表示

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。