Rumah  >  Artikel  >  Java  >  Bagaimana untuk melaksanakan tugas berjadual dalam Java Spring

Bagaimana untuk melaksanakan tugas berjadual dalam Java Spring

PHPz
PHPzke hadapan
2023-05-24 13:28:231192semak imbas

Java melaksanakan tugas berjadual

Dalam perpustakaan yang disertakan dengan Jdk, terdapat dua cara untuk melaksanakan tugas berjadual, satu ialah Timer dan satu lagi ScheduledThreadPoolExecutor.

Pemasa+PemasaTask

Mencipta Timer mencipta urutan, yang boleh digunakan untuk menjadualkan TimerTasktugas

Bagaimana untuk melaksanakan tugas berjadual dalam Java Spring

TimerTerdapat empat kaedah pembinaan, anda boleh nyatakan Timer nama benang dan sama ada hendak menetapkannya sebagai benang daemon. Nama lalai ialah Timer-编号, yang bukan benang daemon secara lalai.

Terdapat tiga kaedah utama:

cancel(): Tamatkan penjadualan tugas, batalkan semua tugasan yang dijadualkan pada masa ini dan tugas yang sedang dijalankan tidak akan terjejas

purge(): Alih keluar semua tugasan yang dibatalkan daripada baris gilir tugas

schedule: Mula menjadualkan tugas, menyediakan beberapa kaedah lebihan:

schedule(TimerTask task, long delay) Pelaksanaan tertunda, menunjukkan delayLaksanakan tasktugas sekali masuk milisaat

jadual(tugas TimerTask, Masa Tarikh)` pada masa yang ditentukan dan laksanakannya sekali pada masa `masa` `tugas
jadual(tugas TimerTask , kelewatan yang lama, tempoh yang lama )` Perlaksanaan kitaran penangguhan, selepas `kelewatan` milisaat, ia akan dilaksanakan setiap `tempoh` milisaat `tugas
jadual(tugas TimerTask, Tarikh mula-mula, tempoh lama)` akan dilaksanakan secara berkala selepas masa yang ditentukan, dan ia akan dilaksanakan sekali setiap `tempoh` milisaat 🎜>

Kelemahan

Pemasa adalah satu benang dan tidak membuang pengecualian. Jika pengecualian berlaku dalam tugasan yang dijadualkan, keseluruhan urutan akan berhenti, menyebabkan tugasan yang dijadualkan ditamatkan.

ScheduledThreadPoolExecutor

Disebabkan oleh kecacatan
, tidak disyorkan untuk menggunakan
dan disyorkan untuk menggunakan
.

ialah penggantian

Ia telah diperkenalkan dalam JDK1.5 dan mewarisi

Ia adalah kelas tugas berjadual berdasarkan reka bentuk kumpulan benang.

Kaedah penjadualan utama:

TimerTimerScheduledThreadPoolExecutor

Laksanakan penjadualan sekali sahaja, (tugas, masa tunda, unit masa tunda)

ScheduledThreadPoolExecutor TimerPenjadualan pada kekerapan tetap Jika masa pelaksanaan terlalu lama, penjadualan seterusnya akan ditangguhkan, (tugas, masa kelewatan pelaksanaan pertama, tempoh, unit masa) ThreadPoolExecutor

Penjadualan kelewatan, sekali. Selepas tugasan dilaksanakan, masa kelewatan ditambah untuk melaksanakan tugasan seterusnya, (tugas, masa kelewatan pelaksanaan pertama, masa selang, unit masa)

ContohBagaimana untuk melaksanakan tugas berjadual dalam Java Spring

public class TimerTest {
    public static void main(String[] args) {
        Timer timer = new Timer("aa");
        Task task = new Task();
        timer.schedule(task,new Date(),1000);
    }
}
class Task extends TimerTask{
    @Override
    public void run() {
        System.out.println(new Date());
    }
}

Tugas berjadual musim bunga Prinsip

schedule Kaedah

permulaan projek

mengimbas kaedah dengan scheduleAtFixedRate anotasi:

public class TimerTest {
    public static void main(String[] args) throws Exception{
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(10);
        scheduledExecutorService.scheduleAtFixedRate(
                () -> System.out.println(new Date()),
                1,3, TimeUnit.SECONDS);
    }
}
rrree

Selepas menghuraikan dan menambah tugasan ke baris gilir tugas, ia diserahkan ke kelas scheduleWithFixedDelay Kaedah

menambah (mendaftar) tugas berjadual kepada persekitaran

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {
	String CRON_DISABLED = ScheduledTaskRegistrar.CRON_DISABLED;
    // cron表达式
	String cron() default "";
    // 时区
	String zone() default "";
    // 从上一次调用结束到下一次调用之间的固定时间
	long fixedDelay() default -1;
    // 和fixedDelay意思相同,只是使用字符传格式,支持占位符。例如:fixedDelayString = "${time.fixedDelay}"
	String fixedDelayString() default "";
    // 两次调用之间固定的毫秒数(不需要等待上次任务完成)
	long fixedRate() default -1;
    // 同上,支持占位符
	String fixedRateString() default "";
    // 第一次执行任务前延迟的毫秒数
	long initialDelay() default -1;
    // 同上,支持占位符
	String initialDelayString() default "";
}

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan tugas berjadual dalam Java Spring. 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