Rumah >Java >javaTutorial >Bagaimana untuk melaksanakan tugas berjadual dalam Java Spring
Dalam perpustakaan yang disertakan dengan Jdk, terdapat dua cara untuk melaksanakan tugas berjadual, satu ialah Timer
dan satu lagi ScheduledThreadPoolExecutor
.
Mencipta Timer
mencipta urutan, yang boleh digunakan untuk menjadualkan TimerTask
tugas
Timer
Terdapat 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 delay
Laksanakan task
tugas sekali masuk milisaat
KelemahanPemasa adalah satu benang dan tidak membuang pengecualian. Jika pengecualian berlaku dalam tugasan yang dijadualkan, keseluruhan urutan akan berhenti, menyebabkan tugasan yang dijadualkan ditamatkan.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 🎜>
ScheduledThreadPoolExecutor
Disebabkan oleh kecacatan
, tidak disyorkan untuk menggunakan
dan disyorkan untuk menggunakan
.
Ia adalah kelas tugas berjadual berdasarkan reka bentuk kumpulan benang.
Timer
Timer
ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor
Timer
Penjadualan 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)
Contoh
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
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
@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!