Java线程(五):Timer和TimerTask

Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。…

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
	static class MyTimerTask1 extends TimerTask {
		public void run() {
			System.out.println("爆炸!!!");
		}
	}	
	public static void main(String[] args) {
		Timer timer = new Timer();
		timer.schedule(new MyTimerTask1(), 2000);// 两秒后启动任务
	}
}

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

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

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
	static class MyTimerTask1 extends TimerTask {
		public void run() {
			System.out.println("爆炸!!!");
			new Timer().schedule(new MyTimerTask2(), 2000);
		}
	}
	static class MyTimerTask2 extends TimerTask {
		public void run() {
			System.out.println("爆炸!!!");
			new Timer().schedule(new MyTimerTask1(), 3000);
		}
	}
	public static void main(String[] args) {
		Timer timer = new Timer();
		timer.schedule(new MyTimerTask2(), 2000);
		while(true) {
			System.out.println(new Date().getSeconds());
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

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

        本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/7436458,转载请注明。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126456.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月7日 下午10:00
下一篇 2022年4月7日 下午10:00


相关推荐

  • yum apache mysql php 配置_Linux Apache php MySQL 安装配置(Centos 6.4 yum安装)「建议收藏」

    yum apache mysql php 配置_Linux Apache php MySQL 安装配置(Centos 6.4 yum安装)「建议收藏」一、yum准备1.Yum(全称为YellowdogUpdater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。2.在安装软件时报’Couldn’tresolvehost’mirrorli…

    2022年7月12日
    16
  • 陶瓷电容分类说明 X7R, X7S, X5R X8R, Z5U, Y5V, C0G等电容的区别

    陶瓷电容分类说明 X7R, X7S, X5R X8R, Z5U, Y5V, C0G等电容的区别文章内容主要翻译两篇英文文章 链接如下 https www raviyp com difference between x7r x5r x8r z5u y5v x7s c0g capacitor dielectrics https www electronics notes com articles electronic components capacitors

    2026年3月18日
    1
  • css自定义滚动条颜色

    css自定义滚动条颜色针对 webkit 内核的浏览器 使用伪类来改变滚动条的默认样式滚动条组成部分 webkit scrollbar 滚动条整体部分 webkit scrollbar thumb 滚动条里面的小方块 能向上向下移动 或向左向右移动 webkit scrollbar track 滚动条的轨道 里面装有 Thumb webkit scrollbar button 滚动条的轨道的两端按钮 由于通过点击微调小方块的位置 webkit scrollbar trac

    2026年3月17日
    2
  • 离散均匀分布的期望和方差(均值和方差的性质)

    总结一下概统用到的各种分布,以及其期望和方差。

    2022年4月12日
    381
  • 太厉害了!推荐几款 Redis 可视化工具

    太厉害了!推荐几款 Redis 可视化工具点击上方 码猿技术专栏轻松关注 及时获取有趣有料的技术文章来自 jianshu com p cb9f4dcb3b92 作者 一入码坑深似海 1 命令行不知道大家在日常操作 redis 时用什

    2026年3月16日
    2
  • Python散点图绘制(用seaborn绘制散点图)

    今天下午学习了如何使用python绘制简单的散点图,写成博客分享一下。在python中画散点图主要是用matplotlib模块中的scatter函数,先来看一下scatter函数的基本信息。网址为:点击打开链接可以看到scatter中有很多参数,经常使用的参数主要有以下几个:c:marker:数据、代码和绘制的图如下。数据(取第一列作为x,取第四列作为y)截图:代码如下…

    2022年4月13日
    147

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号