TimerTask

当TimerTask实例通过schedule方法使用之后,不能通过schedule方法调用第二次,如果重复使用就会抛异常TimerTask is scheduled already。

当你重新想利用这个timertask时,那么你只能重新获得一个实例,最好是写成类:

1  class MyTimerTask extends TimerTask{
2     @Override
3     public void run(){
4         // TODO Auto-generated method stub
5         //do something
6     }
7 };

如果你再次使用TimerTask时,你可以这么做:

1 task    = new MyTask();
2 timer.schedule(task, 1000);

对于这种只使用一次的timer,可以在使用完成之后停止它,新建一个timer意味着新建一个线程,不用了就销毁吧。

1 timer.cancel();
2 timer.purge();
3 timer= null;

每一次使用的时候

1 timer    = new Timer();

在重新new task之前,最好调用

task.cancel();  //将原任务从队列中移除

task.cancel();
时间: 2024-10-23 11:28:20

TimerTask的相关文章

Date、Calendar、DateFormat、SimpleDateFormat、Timer、TimerTask类

类 Date 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年.月.日.小时.分钟和秒值. 它也允许格式化和解析日期字符串.不过,这些函数的 API 不易于实现国际化.从 JDK 1.1 开始,应 该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串. Date 中的相应方法已废弃. Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒). Date(long date) 分配 D

Java中的Timer和TimerTask来实现多线程

Timer是一种线程实施,用来安排以后在后台线程中执行的任务,可安排任务执行一次或者定期重复执行,可以看成一个定时器,可以调度TimerTask,TimerTask是一个抽象类,实现了Runnable接口,所以具备多线程的能力. //定义一个线程周期性做某件事 0.2s new Timer.schedule(new TimerTask() { @override public void run(){ //周期性做什么事情 } },0,200); http://www.bdqn.cn/news/2

JDK中的Timer和TimerTask详解

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

Handler+Timer/TimerTask实现ViewPager的自动循环播放

ViewPager是android.support.v4中提供的空间,和IOS中的UIScrollView有类似的效果,ViewPager正常工作需要一个PagerAdapter. PagerAdapter.java如下: package com.mxd.studyandroid; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import

new TimerTask(robot)(转)

import java.awt.Dimension; import java.awt.Robot; import java.awt.Toolkit; import java.io.PrintStream; import java.util.Timer; import java.util.TimerTask; public class NoLock { public static void main(String[] args) throws Exception { System.out.prin

java的Timer和TimerTask

java中Timer类使用的方法是如下的: Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("abc"); } }, 200000 , 1000); 但是实现的原理是怎么样的.下图是Timer源码的实现方式: 总体来说,Timer中有一个TaskQueue和TimerThread.TaskQueue存放的是任务的堆,最先执行的任务放在最前

Android学习笔记----TimerTask中显示Toast的问题

今天想在TimerTask的run函数中调用Toast显示一下提示信息,却总是导致程序崩溃.可是try语句块却又无法捕获到异常,代码如下: ...... Timer timer = new Timer(); TimerTask sampleTask = null; ...... if (sampleTask==null){ sampleTask = new TimerTask() { @Override public void run() { Toast.makeText(getApplicat

Java线程:Timer和TimerTask

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

TimerTask中如何通过Handler交由UIThread更新UI

有两种方式: 第一种:post给Handler // 开启线程刷新 handler = new Handler(); timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { handler.post(new Runnable() { @Override public void run() { mTextLat.setText(AppContext.getLatitude()+"&quo

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