Rumah  >  Artikel  >  Java  >  Bagaimana untuk menyelesaikan masalah pelaksanaan satu benang berjadual dalam SpringBoot

Bagaimana untuk menyelesaikan masalah pelaksanaan satu benang berjadual dalam SpringBoot

WBOY
WBOYke hadapan
2023-05-12 13:04:121645semak imbas

Perihalan Masalah

Apabila menggunakan tugasan Berjadual dalam SpringBoot, didapati bahawa pelaksanaan tugas tertentu menempati sejumlah besar sumber, menyebabkan tugasan lain gagal dilaksanakan.
Sama seperti senario simulasi berikut, simulasi tugas berjadual test1 mempunyai masa pelaksanaan selama lima saat Pada masa ini, ia akan menjejaskan pelaksanaan tugas test2 secara serentak, menyebabkan tugasan test2 turut dilaksanakan setiap lima saat.

    @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 ");
    }

Bagaimana untuk menyelesaikan masalah pelaksanaan satu benang berjadual dalam SpringBoot

Analisis sebab:

Selepas menyemak maklumat yang berkaitan, didapati bahawa bilangan rangkaian lalai untuk tugasan pemasaan Terjadual adalah hanya satu, dan ia akan disegerakkan apabila menjadualkan tugasan berjadual, satu pelaksanaan selesai sebelum satu lagi dilaksanakan, yang merupakan punca langsung masalah.

Penyelesaian:

    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        // 设置线程数量
        taskScheduler.setPoolSize(50);
        return taskScheduler;
    }

Tambah konfigurasi dan tetapkan bilangan urutan TaskScheduler kepada berbilang, supaya apabila dilaksanakan, ia akan dilaksanakan secara tidak segerak dan setiap tugasan yang dijadualkan tidak akan menjejaskan satu sama lain.

Bagaimana untuk menyelesaikan masalah pelaksanaan satu benang berjadual dalam SpringBoot

Tambahan:

Menggunakan TimerTask yang disertakan dalam pakej util Java berikut juga boleh melaksanakan tugas yang dijadualkan.
Antara parameter berikut, TimerTask ialah tugasan yang akan dilaksanakan 0 bermakna pelaksanaan pertama ditangguhkan selama 0 saat, dan 3000 bermakna ia dilaksanakan setiap 3000 milisaat.

rreeee

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah pelaksanaan satu benang berjadual dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam