1. 程式人生 > >Java:多種方式實現倒計時定時器

Java:多種方式實現倒計時定時器

多種方式實現倒計時定時器

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);
	}*/

}