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

Bagaimana untuk menyelesaikan masalah pelaksanaan satu benang berjadual dalam SpringBoot

WBOY
Lepaskan: 2023-05-12 13:04:12
ke hadapan
1759 orang telah melayarinya

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 ");
    }
Salin selepas log masuk

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;
    }
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan