首页 > 编程语言 >Java线程篇(五):Timer和TimerTask

Java线程篇(五):Timer和TimerTask

时间:2022-12-14 15:40:07浏览次数:40  
标签:Java void Timer util 线程 TimerTask new public


   Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。

        Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。

        一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列中,顺序调度,如果想两个TimerTask并发执行,则需要创建两个Timer。下面来看一个简单的例子:        


​​


1. import java.util.Timer;  
2. import java.util.TimerTask;
3. public class TimerTest {
4. static class MyTimerTask1 extends TimerTask {
5. public void run() {
6. "爆炸!!!");
7. }
8. }
9. public static void main(String[] args) {
10. new Timer();
11. new MyTimerTask1(), 2000);// 两秒后启动任务
12. }
13. }

        schedule是Timer调度任务的方法,Timer重构了四个schedule方法,具体可以查看JDK API。

        看一个稍复杂的例子,假设有这样一种需求,实现一个连环炸弹,2秒后爆炸一次,3秒后爆炸一次,如此循环下去,这就需要创建两个任务,互相调度,代码如下:


​​


1. import java.util.Date;  
2. import java.util.Timer;
3. import java.util.TimerTask;
4. public class TimerTest {
5. static class MyTimerTask1 extends TimerTask {
6. public void run() {
7. "爆炸!!!");
8. new Timer().schedule(new MyTimerTask2(), 2000);
9. }
10. }
11. static class MyTimerTask2 extends TimerTask {
12. public void run() {
13. "爆炸!!!");
14. new Timer().schedule(new MyTimerTask1(), 3000);
15. }
16. }
17. public static void main(String[] args) {
18. new Timer();
19. new MyTimerTask2(), 2000);
20. while(true) {
21. new Date().getSeconds());
22. try {
23. 1000);
24. catch (InterruptedException e) {
25. // TODO Auto-generated catch block
26. e.printStackTrace();
27. }
28. }
29. }



        自JDK5之后,可以用ScheduledThreadPoolExecutor来替代Timer。

标签:Java,void,Timer,util,线程,TimerTask,new,public
From: https://blog.51cto.com/u_15912341/5937182

相关文章

  • JavaScript的数据类型详解
    数据类型JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类型——Object,Object本质上是由一组无序的名值对......
  • Java8:Lambdas(一) 学习lambda表达式
    了解Java8中的lambda表达式对开发人员来说没有什么比自己选择的语言或平台发布新版本更令人激动了。Java开发者也不例外。实际上,我们更期待新版本的发布,有一部分原因是因......
  • Java8:Lambdas(二)学习怎样去使用lambda表达式
    JavaSE8的发布很快就到了。伴随着它来的不仅仅是新的语言lambda表达式(同样被称为闭包或匿名方法)——伴随着一些语言特性支持——更重要的是API和library的增强将会使传统......
  • 关于JavaScript的九个思维导图
    学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将po出10张javascript相关的思维导图。思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具......
  • Java线程篇(六):线程池
    自JDK5之后,Java推出了一个并发包,​​java.util.concurrent​​,在Java开发中,我们接触到了好多池的技术,String类的对象池、Integer的共享池、连接数据库的连接池、Struts1.3的......
  • eclipse运行java.lang.OutOfMemoryError: PermGen space解决方法
    一、在window下eclipse里面Server挂的是tomcat6,一开始还是以为,tomcat配置的问题,后面发现,配置了tomcat里面的catalina.bat文件,加入 setJAVA_OPTS=-Xms512m-Xmx1024m-XX......
  • javaweb之文件上传总结
    一。文件上传:是指允许客户将本地文件,上传到服务器端 常见的应用:上传照片、上传新闻图片、上传附件 文件上传编程基本步骤: 1、在用户页面中添加上传输入项(客户端页......
  • 读书笔记-阿里巴巴Java开发手册-常用的命名风格
    命名风格强制类型不可以用​​_​​​或者​​$​​开始或者结束严禁使用拼音和英文混写类名使用UpperCamelCase风格方法名,参数名,成员变量,局部变量都统一使用lowerCamelCase......
  • LeetCode-Java-872. Leaf-Similar Trees
    题目Consideralltheleavesofabinarytree.Fromlefttorightorder,thevaluesofthoseleavesformaleafvaluesequence.假装有图Forexample,inthegiven......
  • 剑指Offer-Java-二叉树的镜像
    题目题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/\610/\/\57911......