1つの@Asyncメソッドで使用されるスレッドプールが他の非同期メソッドの実行と共有されます

Ashish mishra

特定の@Asyncメソッドの専用実行を目的として@Beanとして初期化されたスレッドプールがあります

class MyConfig {
    @Bean(name="myPool")
    public static TaskExecutor getExecutor(){
        ThreadPooltaskExecutor exec = new ThreadPoolTaskExecutor();
        exec.setCorePoolSize(1);
        exec.setMaxPoolSize(1);
        exec.setThreadNamePrefix("my-thread");
        exec.initialize();
        return exec;
    }
}

Beanとしての上記のスレッドプールは、以下のようにAsyncメソッド呼び出しで使用されます。

public class MyHandler {
    ...
    @Async("myPool")
    public void handle(){
        ...
        logger.INFO("do my thing");
        ...
    }
    ...
}

次のように、デフォルトのSpring @ Asyncプールを使用している他のクラスもあります。

public class OtherScheduledTask {
    ...
    @Async
    public void doThat() {
        logger.INFO("doing that thing");
    }
    ...
}

アプリケーションを実行すると、ログに次の情報が表示されます。

[pool-1-thread-1] [] c.c.a.m.p.e.c.OtherScheduledTask - do my thing
[myPool] [] c.c.a.m.p.e.c.MyHandler - doing that thing
....

上記のログスニペットがランダムに出力され、非同期メソッドがデフォルトでスレッドプールとカスタムスレッドプールを断続的に実行されているのがわかります

非非同期メソッドから@Asyncメソッドを呼び出すシナリオがあります

ただし、カスタムスレッドプールは、MyHandlerの@Asyncメソッドhandle()を1つだけ使用し、他の場所では使用していません。

@asyncメソッドを実行するためにSpringがスレッドプール(カスタムとデフォルトの両方)を混合しているのはなぜですか?

@AsyncメソッドアノテーションでBean名を渡すことの使用法は何ですか?

1つの特定の非同期メソッドで専用のスレッドプールを使用して、実行されていないときにスレッドプールをアイドル状態にし、デフォルトのスプリングスレッドプールでのみ実行される他の非同期メソッドに使用されないようにする方法

私の環境に関する詳細:Springブートバージョン1.4.2 RELEASE JDK 1.8.0

我々はしなければならない

Springとプロキシに関する重要な点の1つは、多くの注釈付き機能がプロキシを使用して機能を提供することです。つまり@Transactional@Cacheableおよび@Asyncすべては、それらの注釈を検出し、プロキシ豆でこれらの豆を包む春に依存しています。

その場合、プロキシメソッドはクラスで呼び出さ場合にのみ使用でき、クラスからは使用できません参照してください。これをトピックについて。

コメントから引用するには:

@Dovmo同じクラスの非非同期メソッドからカスタムプールを使用して1つの非同期メソッドを呼び出しています。他の非同期メソッドはそれぞれのクラスから呼び出されており、他のクラスからこれらのメソッド間での呼び出しはありません

@Asyncコンテキスト内の別のクラスからこれらのメソッドをリファクタリングして呼び出す、クラスをそれ自体に自己自動配線して、その方法で非同期メソッドを呼び出してみてください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C#1つの非同期メソッドが別の非同期メソッドの後に実行されることを確認する方法

分類Dev

非同期で実行されるNodejsの「fs」メソッド

分類Dev

別のスレッドで非同期メソッドを実行しようとすると、なぜ警告が表示されるのですか?

分類Dev

静的メソッドにクラス レベル ロックを作成し、1 つのスレッドがそれを実行すると、同じクラスの他のインスタンス メソッドを実行している他のスレッドがブロックされますか?

分類Dev

Spring Boot:非同期メソッドが別のスレッドで実行されていない

分類Dev

スレッド実行メソッド内で使用されたメソッドの同期

分類Dev

MustHaveHappened アサートは、別のスレッド (Task.Run) で実行される非同期メソッドに対して常に失敗します。

分類Dev

2つの非同期メソッドが別のメソッドと同時に実行されないようにする

分類Dev

Spring @Async Beanメソッドが非同期で実行されないのはなぜですか?

分類Dev

同期メソッドで変更した後、すべてのJavaスレッドに共有リソースの更新が表示されますか?

分類Dev

以前の非同期メソッドのいずれかが実行された後、Javaでメソッドを実行しますか?

分類Dev

実装するインターフェースが非同期の場合、「この非同期メソッドには「await」演算子がなく、同期的に実行されます」という警告を抑制するにはどうすればよいですか?

分類Dev

呼び出し元メソッドの次の行が実行される前に非同期メソッドが終了するのはなぜですか?

分類Dev

非同期メソッドは、awaitを呼び出す前に使用されたスレッドとは異なるスレッドで続行されますか?

分類Dev

メソッドのローカル変数はスレッドで共有されていますか?

分類Dev

同期的に実行される非同期メソッドからロガーオブジェクトにアクセスするときのデッドロック

分類Dev

非同期メソッドでコールバックが呼び出されるのを待つ

分類Dev

firestoreコールバックメソッドは別のスレッドで実行されますか?

分類Dev

メソッドは別のスレッドで実行されています。

分類Dev

ViewComponentの場合:この非同期メソッドには「await」演算子がなく、同期的に実行されます

分類Dev

メソッドをスパイすると、モックされたメソッドではなく実際のメソッドが呼び出されます

分類Dev

2つのスレッドが同期メソッドに入るのを待っている場合、ミューテックスが解放されると、到着した順に実行されますか?

分類Dev

この非同期メソッドには「await」演算子がなく、同期的に実行されます

分類Dev

UIを更新する非同期メソッドが部分的に実行されます

分類Dev

RocketMQでは、メッセージを非同期で送信する場合、ProducerインターフェースのsendAsyncメソッドは使用されませんが、毎回新しいスレッドが作成されます。なぜですか?

分類Dev

コントローラのSpring Boot @Asyncメソッドが同期的に実行されています

分類Dev

1つのノードとすべてのクラスターでスケジュールされたメソッドを実行する方法

分類Dev

HttpClient非同期メソッドを使用すると、誤った形式の文字列が返されます

分類Dev

非同期メソッドでawaitが使用されている場合、Dartはコード行をステップオーバーしています

Related 関連記事

  1. 1

    C#1つの非同期メソッドが別の非同期メソッドの後に実行されることを確認する方法

  2. 2

    非同期で実行されるNodejsの「fs」メソッド

  3. 3

    別のスレッドで非同期メソッドを実行しようとすると、なぜ警告が表示されるのですか?

  4. 4

    静的メソッドにクラス レベル ロックを作成し、1 つのスレッドがそれを実行すると、同じクラスの他のインスタンス メソッドを実行している他のスレッドがブロックされますか?

  5. 5

    Spring Boot:非同期メソッドが別のスレッドで実行されていない

  6. 6

    スレッド実行メソッド内で使用されたメソッドの同期

  7. 7

    MustHaveHappened アサートは、別のスレッド (Task.Run) で実行される非同期メソッドに対して常に失敗します。

  8. 8

    2つの非同期メソッドが別のメソッドと同時に実行されないようにする

  9. 9

    Spring @Async Beanメソッドが非同期で実行されないのはなぜですか?

  10. 10

    同期メソッドで変更した後、すべてのJavaスレッドに共有リソースの更新が表示されますか?

  11. 11

    以前の非同期メソッドのいずれかが実行された後、Javaでメソッドを実行しますか?

  12. 12

    実装するインターフェースが非同期の場合、「この非同期メソッドには「await」演算子がなく、同期的に実行されます」という警告を抑制するにはどうすればよいですか?

  13. 13

    呼び出し元メソッドの次の行が実行される前に非同期メソッドが終了するのはなぜですか?

  14. 14

    非同期メソッドは、awaitを呼び出す前に使用されたスレッドとは異なるスレッドで続行されますか?

  15. 15

    メソッドのローカル変数はスレッドで共有されていますか?

  16. 16

    同期的に実行される非同期メソッドからロガーオブジェクトにアクセスするときのデッドロック

  17. 17

    非同期メソッドでコールバックが呼び出されるのを待つ

  18. 18

    firestoreコールバックメソッドは別のスレッドで実行されますか?

  19. 19

    メソッドは別のスレッドで実行されています。

  20. 20

    ViewComponentの場合:この非同期メソッドには「await」演算子がなく、同期的に実行されます

  21. 21

    メソッドをスパイすると、モックされたメソッドではなく実際のメソッドが呼び出されます

  22. 22

    2つのスレッドが同期メソッドに入るのを待っている場合、ミューテックスが解放されると、到着した順に実行されますか?

  23. 23

    この非同期メソッドには「await」演算子がなく、同期的に実行されます

  24. 24

    UIを更新する非同期メソッドが部分的に実行されます

  25. 25

    RocketMQでは、メッセージを非同期で送信する場合、ProducerインターフェースのsendAsyncメソッドは使用されませんが、毎回新しいスレッドが作成されます。なぜですか?

  26. 26

    コントローラのSpring Boot @Asyncメソッドが同期的に実行されています

  27. 27

    1つのノードとすべてのクラスターでスケジュールされたメソッドを実行する方法

  28. 28

    HttpClient非同期メソッドを使用すると、誤った形式の文字列が返されます

  29. 29

    非同期メソッドでawaitが使用されている場合、Dartはコード行をステップオーバーしています

ホットタグ

アーカイブ