Java:多種方式實現倒計時定時器
阿新 • • 發佈:2019-01-04
多種方式實現倒計時定時器
1、簡易方式實現
/** * @see * @author Al_assad [email protected] * @date 2016年10月18日 上午3:10:13 * @version V1.0 * Description: 倒計時簡易實現,只用單執行緒 */ import java.util.*; import java.util.concurrent.*; public class CountDown { private int limitSec; public CountDown(int limitSec) throws InterruptedException{ this.limitSec = limitSec; System.out.println("Count from "+limitSec); while(limitSec > 0){ System.out.println("remians "+ --limitSec +" s"); TimeUnit.SECONDS.sleep(1); } System.out.println("Time is out"); } //Test /* public static void main(String[] args) throws InterruptedException { new CountDown(10); }*/ }
2、使用ScheduleExecutor實現
/** * @see * @author Al_assad [email protected] * @date 2016年10月18日 上午2:14:43 * @version V1.0 * Description: 倒計時實現方式1:使用ScheduledExecutor實現 * 使用兩個執行緒; */ import java.util.concurrent.*; public class CountDown1 { private volatile int limitSec ; //記錄倒計時時間 private int curSec; //記錄倒計時當下時間 public CountDown1(int limitSec) throws InterruptedException{ this.limitSec = limitSec; this.curSec = limitSec; System.out.println("count down form "+limitSec); ScheduledExecutorService exec = Executors.newScheduledThreadPool(1); exec.scheduleAtFixedRate(new Task(),0,1,TimeUnit.SECONDS); TimeUnit.SECONDS.sleep(limitSec); //暫停本執行緒 exec.shutdownNow(); System.out.println("Time out!"); } private class Task implements Runnable{ public void run(){ System.out.println("Time remains "+ --curSec +" s"); } } //Test /* public static void main(String[] args) throws InterruptedException{ new CountDown1(10); }*/ }
3、使用java.util.Timer實現
/** * @see * @author Al_assad [email protected] * @date 2016年10月18日 上午2:47:44 * @version V1.0 * Description: 倒計時實現方式2:使用java.uitl.Timer實現 * 使用兩個執行緒 */ import java.util.*; import java.util.concurrent.TimeUnit; public class CountDown2 { private int limitSec; private int curSec; public CountDown2(int limitSec) throws InterruptedException{ this.limitSec = limitSec; this.curSec = limitSec; System.out.println("count down from "+limitSec+" s "); Timer timer = new Timer(); timer.schedule(new TimerTask(){ public void run(){ System.out.println("Time remians "+ --curSec +" s"); } },0,1000); TimeUnit.SECONDS.sleep(limitSec); timer.cancel(); System.out.println("Time is out!"); } //Test /* public static void main(String[] args) throws InterruptedException{ new CountDown2(10); }*/ }