Timer和TimerTask的使用

Timer可以定时执行TimerTask任务,使用起来也十分的方便。

以下的代码是输出当前时间的TimerTask

//输出当前时间的任务
private static TimerTask task=new TimerTask(){
	@Override
	public void run() {
		System.out.println(getCurrentTime());
	}
};

以下代码是使用Timer执行TimerTask

//Timer定时执行TimerTask任务
Timer timer=new Timer();
timer.schedule(task, date, period);

使用TimerTask执行的时候没有暂停和恢复,结束之后就没办法再次执行了。

以下代码使用栈保存当前的任务实现暂停和恢复的功能。

命令接口

public interface MyTimerI {

	public void start();

	public void stop();

	public void pause();

	public void resume();

}

实现命令接口

public class MyTimerImpl implements MyTimerI{

	private MyTimerTask task;
	private int date;
	private long period;
	private Stack<MyTimerTask> taskStack;
	private Timer timer;

	public MyTimerImpl(TimerTask timerTask,int date,int period){
		task=new MyTimerTask(timerTask);
		this.date=date;
		this.period=period;
		timer=new Timer();
		taskStack=new Stack<MyTimerTask>();
	}

	@Override
	public void start() {
		timer.schedule(task, date, period);
	}

	@Override
	public void stop() {
		timer.cancel();
	}

	@Override
	public void pause() {
		//使用栈保存当前的任务
		taskStack.push(new MyTimerTask(task.getCurrentTask()));
		task.cancel();
	}

	@Override
	public void resume() {
		//出栈,恢复保存的任务
		task=taskStack.pop();
		timer.schedule(task, 0, period);
	}

    private class MyTimerTask extends TimerTask{

		private TimerTask task;

		public MyTimerTask(TimerTask task){
			this.task=task;
		}

		@Override
		public void run() {
			task.run();
		}

		public TimerTask getCurrentTask(){
			return task;
		}

	}

}

使用方法

	public static void main(String args[]){

		//每隔1秒钟执行一次,不等待
		MyTimerI timer = new MyTimerImpl(task,0,1000);

		timer.start();

		timer.pause();

		timer.resume();

		timer.stop();
	}
时间: 2024-10-12 23:58:29

Timer和TimerTask的使用的相关文章

JDK中的Timer和TimerTask详解

目录结构: Timer和TimerTask 一个Timer调度的例子 如何终止Timer线程 关于cancle方式终止线程 反复执行一个任务 schedule VS. scheduleAtFixedRate 一些注意点 1. Timer和TimerTask Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次. TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务. 2.

Java线程:Timer和TimerTask

Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口. Timer是一种线程设施,用于安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask.TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力. 一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列中,顺序调度,如果想两个TimerTask并发执行,

Android中支持暂停和恢复的Timer和TimerTask封装

由于Timer和TimerTask类的对象只能用一次,所以如果想多次调度同一样的任务,必须重新实例化. 所以,封装了一个TimerHelper类,测试可用. 1 public abstract class TimerHelper { 2 3 private Timer mTimer = null; 4 5 public void start(long delay, long period) 6 { 7 stop(); 8 9 mTimer = new Timer(); 10 mTimer.sch

多线程之Timer和TimerTask

Timer是一种线程设施,用于安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask.TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力. 测试代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import java.util.TimerTask;   public class OneTask extends TimerTask{       private int id;

Timer和TimerTask

最近遇到了一下Timer和TimerTask.以前没有认真看,这次正好有空就看看.略记如下. 先看下简单的例子: public class TestTimer { private static final int MAX_COUNT = 10; private static volatile int count = 0; public static void main(String[] args) { Timer t = new Timer(); //t.schedule(new ETimer(

示例 Groovy中的 Timer 和 TimerTask

import java.util.timer.* class TimerTaskExample extends TimerTask {         public void run() {          println new Date()         } } int delay = 5000   // delay for 5 sec. int period = 1000  // repeat every sec. Timer timer = new Timer() timer.sch

Java计时器Timer和TimerTask用法

1 package com.sy.game.test; 2 3 import java.util.Timer; 4 import java.util.TimerTask; 5 6 public class TimeTask { 7 8 public static void main(String[] args) { 9 TimeTask tTask=new TimeTask(); 10 tTask.timeVoid(); 11 } 12 13 public void timeVoid(){ 14

【Java】利用Timer与TimerTask定时执行任务

在Java里面定时执行一条任务多用于线程与进程配合Thread.currentThread().sleep(XXX);来实现,但是一些小型的任务其实完全利用Timer与TimerTask定时执行,Timer与TimerTask组合跟Thread与Runnable的区别在于,Timer与TimerTask是纯粹的单线程定时执行任务的计时器,相当于Thread与Runnable配合Thread.currentThread().sleep(XXX);的特殊情况,但程序写法定时器没有线程那么复杂.Thr

android,结合Timer和TimerTask实现定时任务

当我们需要每隔一段时间执行一个任务的时候,就需要使用TimerTask了,下面是入门的例子, 值得注意的是Timer.TimerTask,cancel之后就需要重新声明一个对象,否则会报错的哦~ package zhexian.app.myapplication; import android.util.Log; import java.util.Timer; import java.util.TimerTask; /** * Created by kimmy on 2015/9/30. */