ホームページ > Java > &#&チュートリアル > SpringBoot でのスケジュールされたシングルスレッド実行の問題を解決する方法

SpringBoot でのスケジュールされたシングルスレッド実行の問題を解決する方法

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2023-05-12 13:04:12
転載
1932 人が閲覧しました

問題の説明

SpringBoot でスケジュールされたタスクを使用する場合、特定のタスクの実行が大量のリソースを占有し、他のタスクの実行に失敗することが判明しました。
次のシミュレーション シナリオと同様に、test1 スケジュールされたタスクのシミュレーションの実行時間は 5 秒です。この時点で、test2 タスクの実行に同期的に影響を及ぼし、test2 タスクも 5 秒ごとに実行されます。

    @Scheduled(fixedRate = 1000)
    public void test1() throws InterruptedException {
        log.info(Thread.currentThread().getName() + " | task01 ");
        Thread.sleep(5000);
    }

    @Scheduled(fixedRate = 2000)
    public void test2() {
        log.info(Thread.currentThread().getName() + " | task02 ");
    }
ログイン後にコピー

SpringBoot でのスケジュールされたシングルスレッド実行の問題を解決する方法

原因分析:

関連情報を確認した結果、スケジュールされたタイミング タスクのデフォルトのスレッド数は 1 つだけであることが判明しました。スケジュール設定では、ある実行が別の実行より先に完了してしまうことが、問題の直接の原因です。

解決策:

    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        // 设置线程数量
        taskScheduler.setPoolSize(50);
        return taskScheduler;
    }
ログイン後にコピー

構成を追加し、TaskScheduler スレッドの数を複数に設定します。これにより、再実行時に非同期で実行され、スケジュールされた各タスクが互いに影響を与えなくなります。

SpringBoot でのスケジュールされたシングルスレッド実行の問題を解決する方法

補足:

次の Java util パッケージに含まれる TimerTask を使用すると、スケジュールされたタスクを実行することもできます。
次のパラメータの TimerTask は、実行されるタスクです。0 は最初の実行が 0 秒遅れることを意味し、3000 は 3000 ミリ秒ごとに実行されることを意味します。

rree

以上がSpringBoot でのスケジュールされたシングルスレッド実行の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート