0. 倒计时器应用
倒计时器经常应用于各种需要进行计时的场景中。
1. 使用Timer方法
public class CountDownTimer {
private Timer timer;
private int remainingSeconds; // 倒计时时长
public CountDownTimer(int remainingSeconds) {
this.remainingSeconds = remainingSeconds;
timer = new Timer();
}
public void start(int interval) {
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("倒计时:" + remainingSeconds + "秒!");
remainingSeconds -= interval; // 每秒减少的时间
if(remainingSeconds < 0) {
timer.cancel();
System.out.println("倒计时结束!!!");
}
}
}, 0, 1000);
}
public static void main(String[] args) {
CountDownTimer timer = new CountDownTimer(10);
timer.start(1);
}
}
2. 使用ScheduledExecutor实现
public class CountdownTimer {
private int seconds;
public CountdownTimer(int seconds) {
this.seconds = seconds;
}
public void start() {
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println(seconds);
seconds--;
if (seconds < 0) {
executor.shutdown();
}
}
}, 0, 1, TimeUnit.SECONDS);
}
public static void main(String[] args) {
CountdownTimer timer = new CountdownTimer(10);
timer.start();
}
}
3. 使用CountDownLatch实现
public class CountdownTimer {
private int seconds;
public CountdownTimer(int seconds) {
this.seconds = seconds;
}
public void start() throws InterruptedException {
final CountDownLatch latch = new CountDownLatch(seconds);
for (int i = 0; i < seconds; i++) {
final int count = i;
new Thread(new Runnable() {
public void run() {
System.out.println(seconds - count);
latch.countDown();
}
}).start();
}
latch.await();
}
public static void main(String[] args) throws InterruptedException {
CountdownTimer timer = new CountdownTimer(10);
timer.start();
}
}