二、定时器的应用
public void schedule(TimerTask task, long delay):task:要执行的任务 delay:延迟多少毫秒执行任务。
public void schedule(TimerTask task, long delay, long period):period:第一次任务执行之后,每隔多少毫秒循环执行任务。
1、delay 毫秒之后执行任务
new Timer().schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub System.out.println("bombing!"); } }, 3000);
2、首先 delay 毫秒后执行任务,然后每相隔 period 毫秒后循环执行任务。
new Timer().schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub System.out.println("bombing!"); } }, 3000,2000);
3、首先 delay 毫秒后执行任务,然后每隔两秒执行一次,在每隔3秒执行一次,如此循环。
new Timer().schedule(new MyTimerTask(), 2000); class MyTimerTask extends TimerTask{ //通过奇数偶数来判断要隔几秒。 //如果是奇数就隔4000 //如果是偶数就隔2000 static int count=0; @Override public void run() { count=(count+1)%2; System.out.println("bombing!"); // 使用了递归的思想 new Timer().schedule(new MyTimerTask(), 2000+2000*count); }
4、测试结果:
5、通过线程池来实现定时任务线程
ScheduledExecutorService threadPools = Executors.newScheduledThreadPool(2);
1、java.util.concurrent.ScheduledExecutorService的实现,该接口继承ExecutorService
2、可以通过execute方法来执行线程,但是这样就不能实现定时的作用。
3、调用schedule方法来完成调度,跟定时器实现一样:public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit);
Executors.newScheduledThreadPool(3).schedule(new Runnable() { //十秒以后爆炸 @Override public void run() { // TODO Auto-generated method stub System.out.println("booming!"); } }, 10, TimeUnit.SECONDS);