Timer,TimerTask和Thread用法.
Thread用法
(a) 通过new 创建一个Thread对象 (b)Runnable 就绪,调用start()方法启动 (c) Running 运行,执行run方法的代码 (d)Blocked 阻塞,运行状态的线程,遇到阻塞事件,进入阻塞
栗子:
Runnable runnable = new Runnable()
{
@Override public void run() {
while (true) {
Log.d("TAG", "------Thread-----");
try {
Thread.sleep(阻塞时间);
} catch (InterruptedException e) {
e.printStackTrace();
}
} }};
Thread thread = new Thread(runnable);thread.start();
复制代码
Timer 与 TimerTask用法
(a) 继承TimerTask是实现Runnable接口,重载run方法 (b) 启动和取消任务时可调度,第一次执行任务时可指定想要的delay时间 (c) Timer中允许多个TimerTask任务,TimerTask是以队列的方式一个一个执行的
- schedule() 固定延迟调度在任务执行中的每一个延迟会传播到后续的任务的执行
- scheduleAsFixedRate() 用固定比率调度。使用本方法时,所有后续执行根据初始执行的时间进行调度,从而希望减小延迟
- TimerTask的cancel()将自身从任务队列中清楚,其他任务不受影响
- Timer类的cancel():将任务队列中的所有任务清空
- Timer.schedule(TimerTask task,Date firstTime,long period):在指定日期之后的间隔周期,无限循环的执行某一个任务
- Timer.schedule(TimerTask task,long delay):在当前时间的基础上延迟多长时间执行任务
- Timer.schedule(TimerTask task,long delay,long period):在当前时间的基础上延迟多长时间执行任务,再以某一时间间隔执行任务
- Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)安排指定的任务在指定的延迟后开始进行重复的固定速率执行
- schedule方法和scheduleAtFixedRate方法都是按顺序执行的,所以不用担心非线程安全的问题
栗子:
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
Log.d("TAG", "------Timer + TimerTask-----");
}};
timer.schedule(timerTask, delay, timeInterval);
delay: 延迟
timeInterval: 延迟间隔
复制代码