Java提供了两种定时器:Timer和Schedule,它们都可以用来安排在一定时间后执行任务或在指定时间执行任务。
Timer类是在Java 1.3版本中引入的,它允许你安排一个任务在未来执行一次或定期重复执行。Timer类的使用非常简单,你只需要创建一个Timer对象,然后给它安排一个任务,并设置任务开始执行的时间和执行的周期。下面是一个基本的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秒后执行任务}}
Schedule类是在Java 5版本中引入的,它提供了更强大和灵活的任务调度功能。Schedule类使用类似于cron表达式的语法来指定任务的执行时间和执行周期。下面是一个用Schedule类实现的任务调度示例:
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秒执行一次任务}}
从上面的示例可以看出,Schedule类比Timer类更加灵活和精确,因为它可以使用线程池执行任务,并且可以精确控制任务的执行时间和执行周期。