当前位置: 代码迷 >> Android >> Android多线程研究(二)——定时器
  详细解决方案

Android多线程研究(二)——定时器

热度:25   发布时间:2016-04-28 05:33:21.0
Android多线程研究(2)——定时器

先来看一段代码:

	public static void main(String[] args) {		new Timer().schedule(new TimerTask() {						@Override			public void run() {				System.out.println("阳光小强");			}		}, 5000);				int i = 0;		while(true){			System.out.println(i++);			try {				Thread.sleep(1000);			} catch (InterruptedException e) {				e.printStackTrace();			}		}	}

将上面代码修改如下:

		new Timer().schedule(new TimerTask() {						@Override			public void run() {				System.out.println("阳光小强");			}		}, 2000, 3000);
此时定时器Timer就会在2000ms后开始执行run方法,每隔3000ms重复执行。

如果有一种需求,隔1s、2s、1s、2s......分别执行定时器中的代码(偶数秒和奇数秒分别执行不同的定时器),我们如何实现(s代表秒)

实现方式一:

	public static void main(String[] args) {		new Timer().schedule(new TimerTask() {						@Override			public void run() {				System.out.println("阳光小强2秒");				new Timer().schedule(new TimerTask() {										@Override					public void run() {						System.out.println("阳光小强4秒");					}				}, 1000);			}		}, 1000, 2000);				int i = 0;		while(true){			System.out.println(i++);			try {				Thread.sleep(1000);			} catch (InterruptedException e) {				e.printStackTrace();			}		}	}
实现方式二:

	static int count  = 0;	public static void main(String[] args) {				class MyTimerTask extends TimerTask{			@Override			public void run() {				count = (count + 1) % 2;				System.out.println("阳光小强" + (2 + 2 * count) + "秒");				new Timer().schedule(new MyTimerTask(), 2000 + 2000 * count);			}					}		new Timer().schedule(new MyTimerTask(), 2000);				int i = 0;		while(true){			System.out.println(i++);			try {				Thread.sleep(1000);			} catch (InterruptedException e) {				e.printStackTrace();			}		}	}
还有一种实际情况就是定时发邮件,我们可以用下面的方式


import java.util.Calendar;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class TestTimer {	// 时间间隔	private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;	public static void main(String[] args) {		Calendar calendar = Calendar.getInstance();		/*** 定制每日2:00执行方法 ***/		calendar.set(Calendar.HOUR_OF_DAY, 2);		calendar.set(Calendar.MINUTE, 0);		calendar.set(Calendar.SECOND, 0);		Date date = calendar.getTime(); // 第一次执行定时任务的时间		// 如果第一次执行定时任务的时间 小于 当前的时间		// 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。		if (date.before(new Date())) {			date = addDay(date, 1);		}		new Timer().schedule(new TimerTask() {			@Override			public void run() {				//TODO 去发邮件,或者其他定时任务			}		}, date, PERIOD_DAY);	}	// 增加或减少天数	public static Date addDay(Date date, int num) {		Calendar startDT = Calendar.getInstance();		startDT.setTime(date);		startDT.add(Calendar.DAY_OF_MONTH, num);		return startDT.getTime();	}}








  相关解决方案