写点什么

Java 多线程 —— 定时器,svnlinux 使用教程

用户头像
Java高工P7
关注
发布于: 2 小时前

这里需要注意的是,Timer 和 TimerTask 都是线程,Timer 是一个计时器,每个 Timer 对象都是单个后台线程,会依次执行每个任务。


Timer() 创建一个新的计时器:


  1. void schedule(TimerTask task, long delay) 在指定的延迟之后安排指定的任务执行。

  2. void schedule(TimerTask task, long delay, long period)


在指定的延迟之后开始 ,重新执行固定延迟的指定任务(这里的具体任务指括号里面的参数, TimerTask 任务,第一个指定延迟的时间长度是 delay,之后的固定延迟时间是 period)


  1. void cancel() 终止此计时器,丢弃任何当前计划的任务。

void schedule(TimerTask task, long delay)

package test.MyThread.TimeThread;


import java.util.Timer;


import java.util.TimerTask;


public class TimeDemo1 {


public static void main(String[] args) {


//创建一个新的定时器对象


Timer timer = new Timer();


//void schedule(TimerTask task, long delay)


// 在指定的 delay 延迟时间后,执行 task 任务


timer.schedule(new MyTask(timer),3000); //这里的 3000 是 3000 毫秒,即 3 秒


//timer.cancel();终止计时语句不能写在这里


/*


因为 timer 和 TimerTask 的对象,都是线程,会抢夺资源


如果 timer.cancel()先抢到资源,那么定时器就会立刻终止,任务也不会运行


因此这里选择的是将定时器对象传入到 TimerTask 对象中,在任务执行结束后,调用 cancel()终止计时器


*/


timer.schedule(new MyTask(timer),5000);//这里不会有结果,因为定时器已经停止


}


}


class MyTask extends TimerTask{


private Timer timer;


public MyTask(){}


public MyTask(Timer t){


this.timer = t;


}


@Override


public void run() {


System.out.println("时间到了,执行此任务");


timer.cancel();


}


}


结果为


void schedule(TimerTask task, long delay, long period)

package test.MyThread.TimeThread;


import java.util.Timer;


import java.util.TimerTask;


public class TimeDemo2 {


public static void main(String[] args) {


Timer timer = new Timer();


//void schedule(TimerTask task, long delay, long period)


//在指定的延迟时间 delay 后


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


,执行 task 任务,之后每隔 period 时间后再次执行 task 任务


timer.schedule(new MyTask1(timer),3000,2000);


}


}


class MyTask1 extends TimerTask{


private int count = 0;


private Timer timer;


public MyTask1(){}


public MyTask1(Timer timer){


this.timer = timer;


}


@Override


public void run() {


count++;


System.out.println("时间到了,这时第 "+count+" 次执行此任务");


if(count == 5){


timer.cancel();


}


}


}


结果为


实例

在指定的时间删除指定的文件夹


package test.MyThread.TimeThread;

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Java 多线程 —— 定时器,svnlinux使用教程