ホームページ Java &#&チュートリアル TaskExecutor インターフェイスとタイプの概要

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

Jun 25, 2017 am 09:39 AM

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python での SVM の例 Python での SVM の例 Jun 11, 2023 pm 08:42 PM

Python のサポート ベクター マシン (SVM) は、分類および回帰の問題を解決するために使用できる強力な教師あり学習アルゴリズムです。 SVM は、高次元データや非線形問題を処理する場合に優れたパフォーマンスを発揮し、データ マイニング、画像分類、テキスト分類、バイオインフォマティクスなどの分野で広く使用されています。この記事では、Python で分類に SVM を使用する例を紹介します。 scikit-learn ライブラリの SVM モデルを使用します。

Golang でのポインター変換のベスト プラクティスの例を学ぶ Golang でのポインター変換のベスト プラクティスの例を学ぶ Feb 24, 2024 pm 03:51 PM

Golang は、さまざまなアプリケーションやサービスの開発に使用できる強力で効率的なプログラミング言語です。 Golang では、ポインタは非常に重要な概念であり、データをより柔軟かつ効率的に操作するのに役立ちます。ポインタ変換とは、異なる型間のポインタ操作のプロセスを指します。この記事では、具体的な例を使用して、Golang におけるポインタ変換のベスト プラクティスを学びます。 1. 基本概念 Golang では、各変数にはアドレスがあり、アドレスはメモリ内の変数の位置です。

VUE3 入門例: 簡単なビデオ プレーヤーの作成 VUE3 入門例: 簡単なビデオ プレーヤーの作成 Jun 15, 2023 pm 09:42 PM

新世代のフロントエンド フレームワークが出現し続ける中、VUE3 は高速で柔軟、そして使いやすいフロントエンド フレームワークとして愛されています。次に、VUE3 の基本を学び、簡単なビデオ プレーヤーを作成しましょう。 1. VUE3 をインストールする まず、VUE3 をローカルにインストールする必要があります。コマンド ライン ツールを開き、次のコマンドを実行します。 npminstallvue@next 次に、新しい HTML ファイルを作成し、VUE3 を導入します。 &lt;!doctypehtml&gt;

PHP の簡単な Web クローラー開発例 PHP の簡単な Web クローラー開発例 Jun 13, 2023 pm 06:54 PM

インターネットの急速な発展に伴い、データは今日の情報化時代において最も重要なリソースの 1 つになりました。 Webクローラは、ネットワークデータを自動的に取得・処理する技術として、ますます注目と応用が進んでいます。この記事では、PHPを使って簡単なWebクローラーを開発し、ネットワークデータを自動取得する機能を実現する方法を紹介します。 1. Web クローラーの概要 Web クローラーとは、ネットワーク リソースを自動的に取得して処理する技術であり、主な動作プロセスはブラウザーの動作をシミュレートし、指定された URL アドレスに自動的にアクセスし、すべての情報を抽出することです。

Python での VAE アルゴリズムの例 Python での VAE アルゴリズムの例 Jun 11, 2023 pm 07:58 PM

VAE は生成モデルであり、正式名は variationalAutoencoder で、中国語に翻訳すると変分自動エンコーダとなります。これは、画像、音声、テキストなどの新しいデータを生成するために使用できる教師なし学習アルゴリズムです。通常のオートエンコーダと比較して、VAE はより柔軟で強力であり、より複雑で現実的なデータを生成できます。 Python は最も広く使用されているプログラミング言語の 1 つであり、深層学習の主要ツールの 1 つです。 Python には、優れた機械学習と奥深いものが数多くあります。

Oracle インスタンスの数とデータベースのパフォーマンスの関係 Oracle インスタンスの数とデータベースのパフォーマンスの関係 Mar 08, 2024 am 09:27 AM

Oracle インスタンスの数とデータベースのパフォーマンスの関係 Oracle データベースは、業界でよく知られたリレーショナル データベース管理システムの 1 つであり、エンタープライズ レベルのデータ ストレージと管理で広く使用されています。 Oracle データベースでは、インスタンスは非常に重要な概念です。インスタンスとは、メモリー内のOracleデータベースの実行環境を指します。各インスタンスには独立したメモリー構造とバックグラウンド・プロセスがあり、ユーザー・リクエストの処理とデータベース操作の管理に使用されます。インスタンスの数は、Oracle データベースのパフォーマンスと安定性に重要な影響を与えます。

Gin フレームワークでの検証コードの使用例 Gin フレームワークでの検証コードの使用例 Jun 23, 2023 am 08:10 AM

インターネットの普及に伴い、ログイン、登録、パスワードの取得などの操作に確認コードが必要なプロセスになりました。 Ginフレームワークでは、認証コード機能の実装が非常に簡単になりました。この記事では、サードパーティのライブラリを使用して、Gin フレームワークに検証コード機能を実装する方法を紹介し、読者の参考となるサンプル コードを提供します。 1. 依存ライブラリをインストールする 検証コードを使用する前に、サードパーティ ライブラリ goCaptcha をインストールする必要があります。 goCaptcha をインストールするには、goget コマンド $goget-agithub を使用できます。

Python での GAN アルゴリズムの例 Python での GAN アルゴリズムの例 Jun 10, 2023 am 09:53 AM

Generative Adversarial Networks (GAN、Generative Adversarial Networks) は、互いに競合する 2 つのニューラル ネットワークを通じて新しいデータを生成する深層学習アルゴリズムです。 GAN は、画像、音声、テキスト、その他の分野の生成タスクに広く使用されています。この記事では、Python を使用して手書き数字の画像を生成する GAN アルゴリズムの例を作成します。データセットの準備 MNIST データセットをトレーニング データセットとして使用します。 MNIST データセットには以下が含まれます

See all articles