Java提供了兩種定時器:Timer和Schedule,它們都可以用來安排在一定時間后執(zhí)行任務或在指定時間執(zhí)行任務。
Timer類是在Java 1.3版本中引入的,它允許你安排一個任務在未來執(zhí)行一次或定期重復執(zhí)行。Timer類的使用非常簡單,你只需要創(chuàng)建一個Timer對象,然后給它安排一個任務,并設置任務開始執(zhí)行的時間和執(zhí)行的周期。下面是一個基本的Timer示例:
import java.util.Timer; import java.util.TimerTask; public class TimerDemo { public static void main(String[] args) { Timer timer = new Timer(); TimerTask task = new TimerTask() { public void run() { System.out.println("Task executed"); } }; timer.schedule(task, 5000); // 在5秒后執(zhí)行任務 } }
Schedule類是在Java 5版本中引入的,它提供了更強大和靈活的任務調(diào)度功能。Schedule類使用類似于cron表達式的語法來指定任務的執(zhí)行時間和執(zhí)行周期。下面是一個用Schedule類實現(xiàn)的任務調(diào)度示例:
import java.util.Date; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ScheduleDemo { public static void main(String[] args) { ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); Runnable task = new Runnable() { public void run() { System.out.println("Task executed at: " + new Date()); } }; executor.scheduleAtFixedRate(task, 0, 5, TimeUnit.SECONDS); // 每5秒執(zhí)行一次任務 } }
從上面的示例可以看出,Schedule類比Timer類更加靈活和精確,因為它可以使用線程池執(zhí)行任務,并且可以精確控制任務的執(zhí)行時間和執(zhí)行周期。