Rumah  >  Artikel  >  Java  >  Bagaimana untuk menetapkan pemasa untuk pelaksanaan tugas berjadual harian di Jawa?

Bagaimana untuk menetapkan pemasa untuk pelaksanaan tugas berjadual harian di Jawa?

PHPz
PHPzasal
2023-12-27 11:10:241280semak imbas

Bagaimana untuk menetapkan pemasa untuk pelaksanaan tugas berjadual harian di Jawa?

Pemasa Java: Bagaimana untuk menetapkan tugas pelaksanaan berjadual setiap hari?

Dalam pembangunan Java harian, kita sering menghadapi keperluan untuk melaksanakan tugas tertentu secara berkala setiap hari. Contohnya, lakukan tugasan sandaran data pada pukul 1 pagi setiap hari, atau hantar e-mel setiap hari pada pukul 8 malam setiap hari, dsb. Jadi di Jawa, kita boleh menggunakan pemasa untuk mencapai fungsi sedemikian.

Java menyediakan pelbagai kaedah pelaksanaan pemasa Artikel ini akan memperkenalkan dua kaedah berdasarkan Timer dan ScheduledExecutorService untuk menyediakan tugas pelaksanaan berjadual setiap hari, dan menyediakan contoh kod khusus.

1. Gunakan kelas Pemasa untuk melaksanakan tugas berjadual setiap hari

Kelas Pemasa ialah kelas pemasa mudah yang disediakan oleh Java, yang boleh digunakan untuk melaksanakan tugas berjadual. Kita boleh menggunakan kaedah jadual kelas Pemasa untuk menyediakan pelaksanaan berjadual tugas setiap hari dan menggunakan kelas Tarikh untuk menentukan titik masa di mana tugas itu harus dilaksanakan.

Berikut ialah contoh kod yang menggunakan kelas Pemasa untuk melaksanakan tugas berjadual setiap hari:

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class DailyTaskWithTimer {
    public static void main(String[] args) {
        Timer timer = new Timer();
        
        // 设置任务执行的时间(每天的定时时间)
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 1); // 设置时
        calendar.set(Calendar.MINUTE, 0);      // 设置分
        calendar.set(Calendar.SECOND, 0);      // 设置秒
        
        // 如果当前时间已经过了设定的定时时间,则将定时时间推迟到明天
        if (calendar.getTime().before(new Date())) {
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        
        // 执行任务
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                // TODO: 需要执行的任务逻辑
            }
        }, calendar.getTime(), 24 * 60 * 60 * 1000); // 24小时执行一次
    }
}

Dalam kod di atas, kami menetapkan masa pelaksanaan tugas melalui kelas Kalendar Perlu diingat bahawa jika masa semasa telah berlalu masa yang ditetapkan, masa yang dijadualkan akan ditunda ke esok. Kemudian gunakan kaedah jadual Pemasa untuk melaksanakan tugas Parameter pertama ialah objek TimerTask, yang mentakrifkan logik tugasan yang perlu dilaksanakan Parameter kedua ialah masa pelaksanaan tugasan, dan parameter ketiga ialah selang masa tugasan di sini Tetapkan untuk melaksanakan setiap 24 jam.

2. Gunakan ScheduledExecutorService untuk melaksanakan pelaksanaan tugas berjadual setiap hari

ScheduledExecutorService ialah pemasa lanjutan yang disediakan oleh Java, yang menyediakan cara yang lebih fleksibel dan boleh dipercayai untuk melaksanakan tugas yang dijadualkan. Kami boleh menggunakan kaedah scheduledExecutorService untuk melaksanakan jadual pelaksanaan tugas setiap hari.

Berikut ialah contoh kod yang menggunakan ScheduledExecutorService untuk melaksanakan pelaksanaan tugas berjadual setiap hari:

import java.util.Calendar;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class DailyTaskWithScheduledExecutor {
    public static void main(String[] args) {
        ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
        
        // 设置任务执行的时间(每天的定时时间)
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 1); // 设置时
        calendar.set(Calendar.MINUTE, 0);      // 设置分
        calendar.set(Calendar.SECOND, 0);      // 设置秒
        
        // 如果当前时间已经过了设定的定时时间,则将定时时间推迟到明天
        if (calendar.getTime().before(new Date())) {
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        
        // 执行任务
        executorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                // TODO: 需要执行的任务逻辑
            }
        }, calendar.getTimeInMillis() - System.currentTimeMillis(), 24 * 60 * 60 * 1000, TimeUnit.MILLISECONDS); // 24小时执行一次
        
        // 关闭定时器
        //executorService.shutdown();
    }
}

Dalam kod di atas, kami menetapkan masa pelaksanaan tugas melalui kelas Kalendar Perlu diingat bahawa jika masa semasa telah berlalu masa masa yang ditetapkan, Kemudian menangguhkan masa yang dijadualkan kepada esok. Kemudian gunakan kaedah scheduledExecutorService untuk melaksanakan tugasan Parameter pertama ialah objek Runnable, yang mentakrifkan logik tugasan yang perlu dilaksanakan Parameter kedua ialah masa tunda awal tugasan set masa. Perbezaan dari masa semasa Parameter ketiga ialah selang pelaksanaan tugas, yang ditetapkan untuk dilaksanakan setiap 24 jam Parameter keempat ialah unit masa, yang ditetapkan kepada milisaat. Oleh kerana ScheduledExecutorService ialah kumpulan benang, kami juga perlu menutup kumpulan benang secara manual selepas tugasan dilaksanakan.

Ringkasan:

Artikel ini memperkenalkan dua cara untuk menyediakan tugas pelaksanaan berjadual harian di Java: menggunakan kelas Pemasa dan ScheduledExecutorService. Kedua-dua kaedah dapat merealisasikan fungsi melaksanakan tugas secara teratur setiap hari. Pembangun boleh memilih kaedah yang sesuai untuk menjadualkan tugas berjadual berdasarkan keperluan sebenar.

Atas ialah kandungan terperinci Bagaimana untuk menetapkan pemasa untuk pelaksanaan tugas berjadual harian di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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