1:使用java.util.Timer和java.util.TimerTask来实现倒计时的定时任务
import java.util.Timer;
import java.util.TimerTask;
public class CountdownTimer {
private Timer timer;
public CountdownTimer() {
timer = new Timer();
}
public void startCountdown(long userId, int seconds) {
TimerTask task = new TimerTask() {
int remainingSeconds = seconds;
@Override
public void run() {
if (remainingSeconds > 0) {
System.out.println("User " + userId + ": " + remainingSeconds + " seconds remaining.");
remainingSeconds--;
} else {
System.out.println("User " + userId + ": Countdown finished.");
cancel(); // 倒计时完成后取消任务
}
}
};
timer.schedule(task, 0, 1000); // 每隔1秒执行一次任务
}
public static void main(String[] args) {
CountdownTimer countdownTimer = new CountdownTimer();
// 启动倒计时任务,倒计时10秒,userId为1
countdownTimer.startCountdown(1, 10);
// 启动倒计时任务,倒计时5秒,userId为2
countdownTimer.startCountdown(2, 5);
}
}
2:使用ScheduledExecutorService实现倒计时定时任务,更加灵活,推荐
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class CountdownTimer {
private ScheduledExecutorService executorService;
public CountdownTimer() {
executorService = Executors.newScheduledThreadPool(5); // 创建线程池,可以根据需要调整线程池大小
}
public void startCountdown(long userId, int seconds) {
Runnable task = new Runnable() {
int remainingSeconds = seconds;
@Override
public void run() {
if (remainingSeconds > 0) {
System.out.println("User " + userId + ": " + remainingSeconds + " seconds remaining.");
remainingSeconds--;
} else {
System.out.println("User " + userId + ": Countdown finished.");
executorService.shutdown(); // 倒计时完成后关闭线程池
}
}
};
executorService.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS); // 每隔1秒执行一次任务
}
public static void main(String[] args) {
CountdownTimer countdownTimer = new CountdownTimer();
// 启动倒计时任务,倒计时10秒,userId为1
countdownTimer.startCountdown(1, 10);
// 启动倒计时任务,倒计时5秒,userId为2
countdownTimer.startCountdown(2, 5);
}
}